Как мне установить 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
ничего не ломается
Единственным недостатком является то, что нужно открывать терминал после каждой загрузки, чтобы активировать его.