Як встановити Xmodmap для входу?


46

Оскільки моя розкладка клавіатури мені не підходить, я запускаюсь xmodmapна вході. Сценарій названий, .profileі він працює добре, але він порушує інтерфейс Unity.

Я хочу знати, куди слід поставити xmodmapрядок, щоб він виконував мій логін і нічого не порушував.

Я вже намагався вкласти його в файли .bash_loginта .bash_profileфайли, без успіху ( xmodmapне встановлює мою клавіатуру).

Які мої варіанти?


4
Як це порушує інтерфейс єдності?
djeikyb

1
Хочу додати, що якщо час виконання xmodmap занадто довгий, слід видалити всі записи, які ви не змінили вручну. Зберігаючи лише зміни у вхідному файлі, xmodmap запустить набагато швидше.
user1071575

Відповіді:


29

Правильне місце для розміщення xmodmap ~/.Xmodmap(щоб ваші зміни були прочитані при запуску) знаходиться ~/.xinitrc(див. Пояснення нижче), хоча ви можете по черзі розміщувати xmodmapкоманду як елемент запуску ( /usr/bin/xmodmap /home/user/.Xmodmap). Я можу сказати, що на 12.04 (і, імовірно, на 12.10) ці дві альтернативи безумовно спрацьовують, оскільки в будь-якому випадку вони читаються після входу в систему lightdm. (Я змінив Повернення до правої зміни , і зміна набрала чинності лише після введення пароля та входу в систему).

Зверніть увагу: якщо ви перебуваєте на Xfce, на офіційному поширеному запитанні Xfce зазначено, що вам, можливо, доведеться створити елемент запуску замість використання ~/.xinitrc, і що вам, можливо, доведеться затримати виконання, щоб xmodmapзміни не були перезаписані setxkbmap. Ви можете скористатися затримкою, щоб досягти цього у своєму запуску:

/bin/bash -c "sleep 20; /usr/bin/xmodmap /home/$USER/.Xmodmap"

(Для запису при запуску потрібно вказати абсолютні шляхи)

Кожен раз, коли setxkbmapзапускається, щоб змінити розкладку клавіатури, вам доведеться запускати xmodmap ~/.Xmodmapзнову в терміналі.

Створення ~/.xinitrc

Створіть файл у вашому будинку папки .xinitrcз

touch .xinitrc

і розмістіть у ньому:

xmodmap ~/.Xmodmap

У вашому Xmodmapфайлі не повинно бути записів у xmodmap -e " "стилі, який використовується у терміналі для тимчасового встановлення значень. У ньому повинні бути записи в такому форматі:

keycode 65 = Tab
keycode 23 = Space

Часто заплутано, хто з різних Xфайлів (таких як .xprofile, .xinitrcтощо) читається при запуску, але .xinitrc, здається, все ще читається під 12.04, тоді як .Xmodmapчи .xinputrcне читаються самі по собі.


5
Зауважте, що якщо ви внесете зміни xmodmap -e '..., ви можете отримати потрібний формат, за xmodmap .Xmodmapдопомогою xmodmap -pkeякого виводиться поточне відображення - хоча ви хочете відфільтрувати це лише до тих рядків, які застосовуються до внесених змін.
Баррі Келлі

1
Це для мене не спрацювало. Я створив .Xmodmap та .xinitrc | Тоді я помістив xmodmap ~ / .Xmodmap в .xinitrc А потім всередину .Xmodmad У мене є клавішний код 166 = Попередній код
коду

Схоже, що .xinitrc вже не запускається автоматично в Ubuntu 17.10. Вам потрібно буде автоматично запустити його за допомогою цієї команди: / bin / bash -c "sleep 15 && /home/USERNAME/.xinitrc"
thebunnyrules

9

Я використовую ElementaryOS (з його менеджером вікон на базі GNOME) і знайшов рішення за допомогою xdgскриптів автозапуску. Багато менеджерів вікон використовують xdg, тому я припускаю, що цей підхід буде працювати і в інших середовищах. Принаймні, це має працювати з GNOME.

xdg запустити сценарії ~/.config/autostartпід час входу в сеанс X. Щоб завантажити конфігурацію xmodmap після входу, додайте такий сценарій до ~/.config/autostart/xmodmap.desktop:

[Desktop Entry]
Name[en_US]=Xmodmap
Comment[en_US]=xmodmap ~/.Xmodmap
Exec=/usr/bin/xmodmap .Xmodmap
Icon=application-default-icon
X-GNOME-Autostart-enabled=true
Type=Application

Потім вийдіть із системи та ввійдіть знову, і ваша конфігурація Xmodmap повинна бути завантажена.

Якщо це не працює, спробуйте запустити xmodmap в терміналі, щоб побачити, чи скаржиться на xmodmap:

$ xmodmap ~/.Xmodmap

Якщо ви не отримаєте жодної помилки, запустіть наступну команду для налагодження:

$ sudo cat /var/log/syslog | grep -B 5 -A 5 xmodmap

У Linux Mint 17 (заснований на: Ubuntu 14.04.5) підхід до автоматичного запуску працював для мене ідеально після того, як ~/.xinitrcне вдалося використовувати файл. Як вказував hxpax, користувачі Mint (мабуть, більшість Linux / Linux, що походять від Debian) можуть використовувати діалоговий інтерфейс GUI для додавання записів автозапуску за допомогою Main Menu --> Preferences --> Startup Applications.
матст

2
Працював ubuntu 18.04
TooTone

2

У мене зараз немає інтерфейсу єдності, але спробуйте натиснути кнопку Програми на панелі запуску, а потім введіть запуск. Повинен бути додаток під назвою Запуск програм (або деякі такі). Клацніть по ньому і додайте команду xmodmap (наприклад xmodmap /home/thiago/.Xmodmap).


Я спробував це деякий час тому, але мені це не вийшло. Я зараз на Windows, але спробую ще раз пізніше, і повідомляю тут, якщо це працює. thx
Тіаго Мораес

2
@Thiago Moraes Чи працює ця основна команда (якщо ні, опублікуйте помилку)? xmodmap .Xmodmap
djeikyb

+1 це працює. Щоб бути більш чітким, я використав повний шлях для .Xmodmap
pwned

3
це не працює. Я використовую 16.04
miguelmorales85

@ miguelmorales85 чи працює основна команда у вашому терміналі? ви намагалися використовувати абсолютний шлях?
djeikyb

2

У Монетному дворі 17/18 я можу досягти того, щоб мої сценарії помістили в програму запуску із затримкою на 1 секунду.

Оскільки Mint 18 походить від Ubuntu 1604, я думаю, ви можете зробити те ж саме, або спочатку встановити панель управління запуску програм, якщо її немає.

Сподіваюся, це допомагає.


+1 добре працює. Мені не потрібно було зволікати з Linux Mint 17.
матт

@mattst Так, затримка не є обов'язковою.
hxpax

Для цього мені знадобилася затримка на 5 секунд. Тому я використав такий сценарій оболонки запуску: gist.github.com/ghagerer/58212241e37229f9d6fe3a133b34be97
Герхард Хагеррер

0

Я не мав великої радості з будь-яким із запропонованих вище пропозицій (варіант .bashrc не був дійсно життєздатним, оскільки він працює xmodmap на кожному новому терміналі)

Я торкнувся сценарію, який називається xmodstartup.shу моїй домашній папці

  #!/bin/bash           
  sleep 1;               
  echo "running xmodmap" 
  xmodmap ~/.Xmodmap     

з цим врятували, я тоді це зробив sudo chmod +x xmodstartup.sh

тоді я просто додав виконуваний файл у вікно "Налаштування програми запуску" gnome. Біш Бош, англійська верстка y Español on altgr:)


-1

Внесення змін xmodmap до ~/.bashrcабо /etc/bash.bashrcнічого не порушує.

Недоліком є ​​лише те, що потрібно відкривати термінал після кожного завантаження, щоб активувати його.


3
Я вже роблю це, але проблема полягає в тому, що на кожному відкритому терміналі ця команда виконується. Це лише мить, але це трохи дратує, і я вважаю за краще справжнє рішення. thx у будь-якому випадку
Тіаго Мораес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.