Openbox перезаписывает конфигурацию xmodmap

9

Я устанавливаю openbox на моем ноутбуке под управлением Linux Mint 13. Я хочу, чтобы мой ключ Caps Lock действовал как дополнительный управляющий ключ. Я поместил необходимые настройки в свой ~/.Xmodmapфайл и проверил его, запустив

xmodmap ~/.Xmodmap

Работает правильно.

Однако, когда я перехожу в сеанс openbox, эти ключевые изменения отсутствуют. Запуск вышеуказанной xmodmapкоманды заставляет ее работать снова, но я хочу, чтобы это происходило автоматически при запуске.

Что интересно, я добавил тестовую zenityкоманду в свой ~/.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что это не переписывает мои изменения.

Затем, немного погуглив, познакомил меня с setxkbmapкомандой, которая, очевидно, тоже может делать то же самое. Я также заменил этот исполняемый файл, аналогично xmodmap выше. И я получил команду преступника!

setxkbmap -option terminate:ctrl_alt_bksp

Я понятия не имею, что это делает, но после запуска xmodmap ~/.Xmodmap(при котором мои настройки были применены правильно), если я запускаю указанную выше команду, мои изменения сбрасываются! Изменить : это оказывается очень смешно. Просто setxkbmapкоманда без каких-либо аргументов, радостно перезаписывает мои изменения xmodmap ~/.Xmodmapкомандой.

Теперь у меня есть две вещи, чтобы выяснить, откуда это setxkbmapзапускается и почему и как это исправить. Я все еще расследую, но могу серьезно помочь :)

Обновление 2

К черту xmodmap. Я не могу понять, откуда setxkbmapвызывается, но я нашел способ использовать setxkbmapкоманду, чтобы заставить мой Caps Lock вести себя как Ctrl.

setxkbmap -option ctrl:nocaps

Просто перед запуском openbox. Работает великолепно. Клавиша Caps Lock продолжает действовать как клавиша Ctrl. xmodmapникогда не запускается

Я оставлю этот вопрос открытым, чтобы кто-то, кто знает эти вещи, мог дать некоторое представление. Кроме того, для людей, которые сталкиваются с этим после меня :)

Обновление 3

Вот содержимое моего .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 &

Насколько я могу судить, это не имеет ничего общего с клавиатурой. Кроме того, вот сценарий, который запускает мою сессию: (Запуск от lightdm)

#!/bin/bash

setxkbmap -option ctrl:nocaps

exec openbox-session
Шрикант Шарат
источник
вы, вероятно, используете какую-то конфигурацию клавиатуры, например, выбираете раскладку клавиатуры или что-то подобное, что отменяет внесенные вами изменения
Ульрих Дангель,
Единственное другое место, где я возился с настройкой клавиатуры, это окно настроек раскладки клавиатуры с графическим интерфейсом, где я изменил клавишу caps lock, чтобы она работала как дополнительный ctrl. Это прекрасно работает, в Cinnamon DE мой caps lock действует как ctrl даже после повторного входа. Я думаю, что конфигурация была только для корицы, но я не уверен.
Шрикант Шарат
как вы добавляете команду в скрипт автозапуска?
pedrosaurio
Вы можете опубликовать свой autostartфайл?
pedrosaurio

Ответы:

1

У меня была похожая проблема. Оказалось, что это было вызвано ibus. Я просто удалил его, так как мне не нужны его услуги.

Я нашел виновника, используя ваш трюк замены setxkbmap сценарием, однако я также добавил, ps -AF --forestчтобы определить вызывающего setxkbmap.

gobenji
источник
0

Не зная вашего сценария автозапуска, могу поспорить, что вы не используете правильный синтаксис, позволяя вашим командам работать в фоновом режиме с помощью ampersand ( &).

Попробуйте отредактировать .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 ) &

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

http://openbox.org/wiki/Help:Autostart

pedrosaurio
источник
Мой файл автозапуска пуст. В какой-то момент у меня было xmodmap ~/.Xmodmapв этом файле (без &, не казалось необходимым). Я звонил xmodmap(и сейчас setxkbmap) в сценарий, который запускает мой сеанс openbox. Непосредственно перед запуском exec openbox-sessionя запускаю setxkbmapкоманду.
Шрикант Шарат
Кроме того, добавление sleep 1задержки для xmodmapприменения ее изменений после загрузки всего остального, хотя и работает большую часть времени, не дает мне уверенности в этом решении. Я бы предпочел не делать этого, если у меня есть альтернативы.
Шрикант Шарат
Очевидно, что вы можете избежать всех комментариев и sleepкоманд, тем не менее, они &необходимы после каждой записи, иначе все программы после первой записи не будут работать вообще.
pedrosaurio
Да, если это приложение / процесс, работающее в течение длительного времени, отсутствие добавления &приведет к его блокировке. Я использовал это поведение с zenityкомандой, чтобы обнаружить, что мои xmodmapизменения перезаписываются после autostart финиша. Мой автозапуск теперь увеличивается в размерах и через мгновение вставит его в вопрос. Это не имеет ничего общего с клавиатурой, хотя.
Шрикант Шарат
А без команды sleep внесенные изменения xmodmapперезаписываются, как только файл автозапуска заканчивается.
Шрикант Шарат