Как мне установить Xmodmap при входе в систему?

46

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

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

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

Какие у меня варианты?

Тьяго Мораес
источник
4
Как это нарушает единство интерфейса?
Джейкиб
1
Я хотел бы добавить, что если ваше время выполнения xmodmap слишком велико, вы должны удалить все записи, которые вы не изменили вручную. Сохранение только изменений в вашем входном файле заставит xmodmap работать намного быстрее.
user1071575

Ответы:

29

Правильное место для размещения xmodmap ~/.Xmodmap(чтобы ваши изменения читались при запуске) находится в ~/.xinitrc(см. Пояснение ниже), хотя вы можете поочередно поместить xmodmapкоманду в качестве элемента запуска ( /usr/bin/xmodmap /home/user/.Xmodmap). Я могу сказать, что для 12.04 (и предположительно 12.10) эти две альтернативы определенно работают, так как они читаются в любом случае после того, как вы вошли в систему lightdm. (Я изменил Return to Right Shift , и изменения вступили в силу только после ввода моего пароля и входа в систему).

Обратите внимание: если вы используете Xfce, в официальном FAQ по 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 = предыдущий код 167 = следующий
miguelmorales85
похоже, что .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
kontrollanten
источник
В Linux Mint 17 (на основе: Ubuntu 14.04.5) подход автозапуска отлично работал после ~/.xinitrcнеудачного использования файла. Как указал hxpax, пользователи Mint (вероятно, большинство / все производные от Debian Linux) могут использовать диалоговое окно с графическим интерфейсом для добавления записей автозапуска посредством Main Menu --> Preferences --> Startup Applications.
Mattst
2
Работает
2

Сейчас у меня нет интерфейса Unity, но попробуйте нажать кнопку Приложения на панели запуска, а затем введите автозагрузку. Должно быть приложение под названием Startup Applications (или еще какое-то подобное). Нажмите на нее и добавьте команду xmodmap (например xmodmap /home/thiago/.Xmodmap).

djeikyb
источник
Я попробовал это некоторое время назад, но у меня это не сработало. Я нахожусь на окнах прямо сейчас, но я попробую еще раз позже и сообщу здесь, если это работает. спасибо
Тьяго Мораес
2
@Thiago Moraes Работает ли эта основная команда (если нет, опубликуйте сообщение об ошибке)? xmodmap .Xmodmap
djikyb
+1 это работает. Чтобы быть более точным, я использовал полный путь для .Xmodmap
pwned
3
это не работает. Я использую 16.04
miguelmorales85
@ miguelmorales85 работает ли основная команда в вашем терминале? Вы пытались использовать абсолютный путь?
djikyb
2

На Mint 17/18 я могу добиться того, чтобы мои сценарии помещались в Startup Application с задержкой в ​​1 секунду.

Поскольку Mint 18 является производным от Ubuntu 1604, я думаю, вы можете сделать то же самое или сначала установить панель управления Startup Application, если ее там нет.

Надеюсь, это поможет.

hxpax
источник
+1 Работает хорошо. Мне не нужно было откладывать на Linux Mint 17.
Mattst
@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

Затем я просто добавил исполняемый файл в окно «Настройки запуска приложения». биш Бош, английский макет у Español на altgr:)

Джей Эдвардс
источник
-1

Внесение изменений в xmodmap ~/.bashrcили /etc/bash.bashrcничего не нарушает.

Единственным недостатком является то, что нужно открывать терминал после каждой загрузки, чтобы активировать его.

Расмус
источник
3
Я уже делаю это, но проблема в том, что на каждом терминале, который я открываю, эта команда выполняется. Это всего лишь мгновение, но это немного раздражает, и я бы предпочел реальное решение. спасибо в любом случае
Тьяго Мораес