Я настраиваю openbox на своем ноутбуке под управлением Linux Mint 13. Я хочу, чтобы мой ключ Caps Lock стал дополнительным ключом управления. Я установил необходимые настройки в файл ~/.Xmodmap
и проверил его, выполнив
xmodmap ~/.Xmodmap
Он работает правильно.
Однако, когда я переписываю сеанс openbox, этих ключевых изменений нет. Запуск вышеуказанной команды xmodmap
ее снова работать, но я хочу, чтобы она автоматически выполнялась при запуске.
Интересно, что я добавил команду test zenity
как ~/.config/openbox/autostart
файле ~/.config/openbox/autostart
zenity --info --text=Hello
Это создает небольшое диалоговое окно и выходит только после закрытия диалога.
Теперь, когда я переписываю сеанс openbox, Caps Lock действует как клавиша Ctrl, пока диалог zenity не будет закрыт. Как только это диалоговое окно будет закрыто, Caps Lock вернется к по умолчанию.
Я ничего не нашел по этому поводу с Google, поэтому я прошу помочь здесь. У вас, ребята, есть идеи о том, что может пойти не так?
Я пытался понять это, и в моих экспериментах я скопировал файл /usr/bin/xmodmap
в /usr/bin/xmodmap_
и заменил файл /usr/bin/xmodmap
следующим сценарием bash
#!/bin/bash { echo '-------' date echo xmodmap "$@" } >> ~/xmodmap-calls exec /usr/bin/xmodmap_ "$@"
Поэтому каждый раз, когда любой проклятый скрипт в системе запускает xmodmap
, я узнаю его.
При этом я переписываю, и я нахожу только одну запись в файле ~/xmodmap-calls
, который работает с моим ~/.Xmodmap
, который ожидается. Итак, я понял, что это не xmodmap
который переписывает мои изменения.
Далее, немного googling познакомил меня с командой setxkbmap
, которая, очевидно, также может сделать то же самое. Я также заменил этот исполняемый файл, аналогично xmodmap выше. И я получил преступную команду!
setxkbmap -option terminate:ctrl_alt_bksp
Я понятия не имею, что это делает, но после запуска xmodmap ~/.Xmodmap
(который применил мои настройки правильно), если я запустил xmodmap ~/.Xmodmap
выше команду, мои изменения будут сброшены! Редактировать : Это действительно забавно. Просто команда setxkbmap
без каких-либо аргументов, с радостью перезаписывает мои изменения командой xmodmap ~/.Xmodmap
.
Теперь у меня есть две вещи, которые нужно выяснить, где этот setxkbmap
запущен и почему и как это исправить. Я все еще расследую, но могу серьезно использовать какую-то помощь 🙂
К черту xmodmap
. Я не могу понять, откуда setxkbmap
, но я решил использовать команду setxkbmap
чтобы сделать мой Caps Lock в качестве Ctrl.
setxkbmap -option ctrl:nocaps
Незадолго до запуска openbox. Работает блестяще. Ключ блокировки кнопок остается действующим как клавиша ctrl. xmodmap
никогда не запускается.
Я буду держать этот вопрос здесь открытым, чтобы кто-то, кто знает эти вещи, мог дать некоторое представление. Кроме того, для людей, которые сталкиваются с этим после меня 🙂
Вот содержимое моего .config/openbox/autostart
, по запросу pedrosaurio.
#!/bin/bash # Set the wallpaper. feh --bg-scale /wall.png # Set default brightness. xbacklight -time 1 '=40' # Compositing. xcompmgr & # The panel. tint2 & # Start a terminal too. roxterm &
Насколько мне известно, это не имеет ничего общего с клавиатурой. Кроме того, вот сценарий, который запускает мой сеанс: (Run by lightdm)
#!/bin/bash setxkbmap -option ctrl:nocaps exec openbox-session
У меня была аналогичная проблема. Оказалось, что это было вызвано ибусом. Я просто удалил его, поскольку мне не нужны его службы.
Я нашел преступника, используя трюк замены setxkbmap скриптом, однако я также добавил ps -AF --forest
чтобы идентифицировать вызывающего абонента setxkbmap.
Не зная сценарий автозапуска, моя ставка заключается в том, что вы не используете правильный синтаксис, позволяя командам работать в фоновом режиме с помощью амперсанда ( &
).
Попробуйте отредактировать файл .config/openbox/autostart
чтобы он выглядел так:
# Run the system-wide support stuff #. $GLOBALAUTOSTART # Programs to launch at startup # Programs that will run after Openbox has started (sleep 1 && xmodmap ~/.Xmodmap ) &
Если вы сомневаетесь, посмотрите в wiki openbox и посмотрите, как все примеры имеют &
после каждой записи.