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

7912
Matthew

Я хочу запускать эту команду при каждом входе в систему (или при каждом запуске, если это не работает): 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 созданы, но ключи все еще не переназначены. Если я просто скопировать / вставить команду и запустить ее вручную, она работает нормально. Но это не будет работать при входе в систему. Есть идеи?

10

3 ответа на вопрос

11
Gilles

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

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

keysym Delete = Menu keysym Menu = Delete 

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

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

I found that in the place in Gconf-Editor mentioned above the name of your revised keyboard layout should appear twice, once under "known_file_list" and once under "update_handlers". As to why Ubuntu sometimes puts in the latter entry, and sometimes doesn't... well, it keeps you on your toes, doesn't it?

Incidentally, after a lot of research I used the above tweak to re-assign the Left Windows key. I put the following statement in my own keyboard layout to make it duplicate the Left Arrow key:-

keycode 133 = 0xFF51

(Check that those are the right codes for you by going into xev and pressing first one key then the other.)

It's only a little point, but while I'm on the Internet it gives me a convenient "Back" key - Alt+Win with the left hand. I can do it without looking.

Alan wrote: "I found that in the place in Gconf-Editor mentioned above the name of your revised keyboard layout should appear twice, once under "known_file_list" and once under "update_handlers"." I can confirm that Alan is correct. In Ubuntu 10.10, in order for your ~/.Xmodmap file to have an effect, ".Xmodmap" has to appear in both the "known_file_list" and the "update_handlers" list under /desktop/gnome/peripherals/keyboard/general in gconf-editor. Thanks, Alan. 13 лет назад 1
1
garyjohn

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

keysym Delete = Menu keysym Menu = Delete