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

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

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

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

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

8 ответов

Правильное место для 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 не читаются сами по себе.

Я использую 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

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

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

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

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

Я не испытывал особой радости ни от одного из предложенных выше предложений (опция.bashrc не была действительно жизнеспособной, так как она запускала xmodmap на каждом новом терминале)

Я коснулся сценария под названием xmodstartup.sh в моей домашней папке

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

с этим я сохранил sudo chmod +x xmodstartup.sh

Затем я просто добавил исполняемый файл в окно "Настройки запуска приложения". Bish Bosh, английская раскладка altgr:)

Для гном3:

xinitrc начинается с /etc/X11/xinit/xinitrcи содержит только одну команду: . /etc/X11/XsessionЭтот глобальный файл Xsession устанавливает пути, которые выполняются:

          USERXSESSION=$HOME/.xsession
    USERXSESSIONRC=$HOME/.xsessionrc

я кладу echo $(date) >> ~/sesscheckв $USERXSESSIONRCчтобы проверить, выполняется ли этот файл при входе в систему gnome. Оно работает. Однако если поставить xmodmap ~/.Xmodmapвместо записи тестового файла сопоставление клавиш остается по умолчанию. Это означает, что xmodmap по умолчанию переопределяет настройки, когда xinitrc уже запущен.

Как сказал выше @kontrollanten, самый надежный способ — создать .desktopфайл и поместите его в ~/.config/autostartкаталог. Пример входа на рабочий стол, изменение раскладки после входа пользователя Gnome:

      [Desktop Entry]
Version=1.0
Type=Application
Encoding=UTF-8
Name=Correct keys layout
Exec=/usr/bin/xmodmap ~/.Xmodmap
Terminal=false
StartupNotify=false
Categories=Application;
X-GNOME-Autostart-enabled=true

В моем случае я вообще потерял функциональность цифровой клавиатуры, и мне нужно было сопоставить коды клавиш цифровой клавиатуры с точными цифрами. Так, ~/.Xmodmapявляется:

      keycode  87 = 1 1 1 1 1 1
keycode  83 = 4 4 4 4 4 4
keycode  79 = 7 7 7 7 7 7
keycode  80 = 8 8 8 8 8 8
keycode  84 = 5 5 5 5 5 5
keycode  88 = 2 2 2 2 2 2
keycode  81 = 9 9 9 9 9 9
keycode  89 = 3 3 3 3 3 3
keycode  85 = 6 6 6 6 6 6
keycode  90 = 0 0 0 0 0 0
keycode  86 = plus plus plus plus plus plus
keycode  82 = minus minus minus minus minus minus
keycode  91 = period period period period period period

Кажется, что даже .config/autostart немного привередлив. У Джея было хорошее решение, но я понял, что вы можете поместить команды в xmodmap.desktop, просто засыпая 1 секунду без необходимости создавать дополнительный скрипт bash.

      Name[en_US]=Xmodmap
Comment[en_US]=xmodmap ~/.xmodmap
Exec=/bin/bash -c "sleep 1; /usr/bin/xmodmap .xmodmap"
Icon=application-default-icon
X-GNOME-Autostart-enabled=true
Type=Application```

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

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

Другие вопросы по тегам