Почему моя команда xmodmap не запускается при запуске / входе в систему?

10

Я хочу запускать эту команду при каждом входе в систему (или при каждом запуске, если это не работает): xmodmap -e 'keysym Delete = Menu' -e 'keysym Menu = Delete'

Я перепробовал много вещей. Я вставил команду System > Preferences > Startup Applications. Я положил его в .shфайл, пометил chmod +xи вставил этот файл System > Preferences > Startup Applications. Я вставил сценарий /etc/init.d. Я вставил команды ~/.profile. Ничто не похоже на работу.

Наконец, я вставил это в мой ~/.profile:

touch test1
xmodmap -e 'keysym Delete = Menu' -e 'keysym Menu = Delete'
touch test2

Оба test1 и test2 созданы, но ключи все еще не переназначены. Если я просто скопировать / вставить команду и запустить ее вручную, она работает нормально. Но это не будет работать при входе в систему. Есть идеи?

Мэтью
источник

Ответы:

11

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

Поместите ваши настройки в файл с именем ~/.Xmodmap:

keysym Delete = Menu
keysym Menu = Delete

В стандартной среде Gnome в Ubuntu 10.04 при следующем входе в систему вам будет предложено загрузить ~/.Xmodmap. Загрузите его и отметьте «не спрашивайте меня снова». Тогда ваш .Xmodmapбудет применен после настроек по умолчанию.

Жиль "ТАК - перестань быть злым"
источник
Спасибо, это сработало отлично. Из любопытства, как бы я вернулся к диалоговому окну, которое я проверил "не спрашивай меня снова", если бы я хотел когда-нибудь в будущем?
Мэтью
1
@ Matthew: не проверено: запустить gconf-editor, просмотреть /desktop/gnome/peripherals/keyboard/generalи отредактировать known_file_listзапись для удаления .Xmodmap.
Жиль "ТАК - перестать быть злым"
Это сработало для меня в бета-версии Ubuntu 10.10, когда вы впервые ответили на этот вопрос. Вчера я сделал новую установку Ubuntu 10.10 и поместил идентичный файл .Xmodmap в мою домашнюю папку. Когда я снова вошел в систему, я получил диалог, загрузил .Xmodmap и поставил галочку, как и раньше. Но это не похоже на переназначение ключей. Я проверил в gconf, и .Xmodmap определенно находится в known_file_list. Есть идеи?
Матфея
Это также не работает для меня на Gnome 3.10.1 / Archlinux. Интересно, не было ли что-то настроено в том порядке, в котором Gnome загружает раскладки клавиатуры.
Калеб
Для Gnome 3.10, больше не загружающего ~ / .xmodmap, я нашел решение, которое работало на bbs.archlinux.org/viewtopic.php?pid=1194968#p1194968 : отключить плагин клавиатуры Gnome. $ gsettings set org.gnome.settings-daemon.plugins.keyboard active false
PLNX
2

Я обнаружил, что в упомянутом выше месте в Gconf-Editor имя вашей измененной раскладки клавиатуры должно появляться дважды, один раз в «known_file_list» и один раз в «update_handlers». Что касается того, почему Ubuntu иногда вставляет последнюю запись, а иногда нет ... ну, это держит вас в напряжении, не так ли?

Кстати, после долгих исследований я использовал вышеуказанный твик для переназначения левой клавиши Windows. Я поместил следующее утверждение в свою собственную раскладку клавиатуры, чтобы дублировать клавишу со стрелкой влево:

код ключа 133 = 0xFF51

(Убедитесь, что это правильные коды, зайдя в xev и нажав сначала одну клавишу, а затем другую.)

Это всего лишь небольшой вопрос, но пока я в Интернете, он дает мне удобную клавишу «Назад» - Alt + Win левой рукой. Я могу сделать это, не глядя.

Алан
источник
1
Алан написал: «Я обнаружил, что в упомянутом выше месте в Gconf-Editor имя вашей исправленной раскладки клавиатуры должно появляться дважды, один раз в« known_file_list »и один раз в« update_handlers »». Я могу подтвердить, что Алан прав. В Ubuntu 10.10, чтобы ваш файл ~ / .Xmodmap имел эффект, «.Xmodmap» должен отображаться как в списке «known_file_list», так и в списке «update_handlers» в / desktop / gnome / периферийное устройство / клавиатура / general в gconf -редактор. Спасибо, Алан.
1

Некоторые системы ищут файл с именем ~/.Xmodmapи выполняют найденные там команды. Попробуйте поместить эти строки в этот файл:

keysym Delete = Menu
keysym Menu = Delete
garyjohn
источник