Почему мой файл ~ / .Xmodmap не загружается при входе в систему?

16

Я создал следующий ~/.Xmodmapфайл согласно этому ответу .

keysym Delete = Menu
keysym Menu = Delete

clear Lock
keycode 0x42 = Escape

Другими словами, поменяйте местами Deleteи Menu, и сделайте Caps Lockдополнительный Escape.

В следующий раз, когда я вошел в систему, Ubuntu спросила меня, хочу ли я загрузить, ~/.Xmodmapкак ожидалось. Я загрузил его, но ничего не произошло (ни тогда, ни при последующих входах в систему). Если я запускаю вручную xmodmap ~/.Xmodmap, он работает как положено.

Я знаю, что это работало в начале бета-версии 10.10, но это не помогло в моей новой версии 10.10. Я не пробовал ничего раньше 10.10. Есть идеи?

Редактировать: я вставил несколько отладочных операторов, /etc/gdm/Xsessionчтобы убедиться, что ~/.Xmodmapзагружается, и все волшебным образом начало работать. Я ничего не изменил, кроме добавления эха, и он все еще работает, когда я отменил свои изменения и перезапустил снова. Странная вещь, которую я когда-либо видел.

Одна вещь, которую я понял, заключается в том, что часть XmapMap "переназначить Caps Lock to Escape" всегда работала. Это был просто обмен Удалить / Меню, который не удался. Я оставлю этот вопрос открытым на тот случай, если у кого-то еще возникнет такая же проблема, поскольку я на самом деле не знаю, почему проблема прекратилась.

Мэтью
источник
Я сам испытываю эту же проблему, сводя меня с ума. Если я выясню причину, я обязательно отправлю ответ.
Хорхе Исраэль Пенья

Ответы:

11

Я знаю, что это глупо, но в качестве обходного пути вы могли бы просто начать автоматически xmodmap ~/.Xmodmap.

Также вы можете проверить /etc/gdm/Xsessionстроку usermodmap="$HOME/.Xmodmap"и, если ее нет, просто добавить ее в конец файла. Если вы единственный пользователь системы, просто внесите свои изменения /etc/X11/Xmodmap.

турбо
источник
2
Как вы "автозапускаете" команды?
miguel.martin
См. Автозапуск . Возможно, проще всего просто добавить запись Settings->Session and Startupили что-то в этом роде.
Матин Улхак
Или, например, добавьте его в свою оболочку, поэтому, если вы часто открываете оболочки, он будет запускаться. Первое, что я делаю, когда вхожу в Gnome, - это чаще всего открываю оболочку, так что это один из способов работы.
trusktr
3

Поздно на вечеринку, но это сводило меня с ума также; и, как бы я ни был упрям, сдаваться нельзя.

В основном это то, что я пытался (как мой пользователь или root, если это необходимо)

  • Только ~ / .Xmodmap
  • ~ / .xsession, ~ / .xsessionrc
  • ~ / .Gnomerc
  • ~ / .Xprofile
  • ~ / .Xinitrc
  • /etc/X11/Xsession.d/myscript
  • /usr/share/X11/xorg.conf.d/ ( файлы конфигурации, не трогали его )

(Собственно, добавление xmodmapкоманды в ~/.bashrcработало, но для этого требуется запускать терминал каждый раз после входа в систему)

Несколько лет назад (?) xkbБыл выбран для работы с сопоставлением и настройкой ключей (взаимодействием с X), но xmodmapмог также запросить изменения, связанные с ключами, в X после того, как он xkbвыполнил свою работу во время инициализации сеанса X.

Проблема в том, когда должны произойти эти настройки xmodmap?
Это , кажется , эти файлы выше обрабатывается слишком рано в процессе, и либо X не был готов принять Xmodmap изменения или Х бы переписать их.

Примечание: я добавил некоторое «отслеживание» к этим файлам, чтобы убедиться, что они действительно запущены в какое-то время!

Решение, которое, кажется, работает

.desktopСначала я не хотел добавлять файл (простого однострочного сценария должно быть достаточно), но это работает, так что вот оно.
Решение приходит из Как переназначить или поменять местами специальные клавиши клавиатуры в Linux? «Решение 1»

В основном создайте ~/.config/autostart/my-xmodmap.desktopфайл и вставьте в него:

[Desktop Entry]
Name=MyXmodmap
Exec=/usr/bin/xmodmap /home/me/.Xmodmap
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true

замените его meименем пользователя (обратите внимание, что я не стал пытаться ~/или $HOMEвместо него может работать одинаково хорошо /home/me, и полный путь к xmodmap, скорее всего, не нужен ...), и добавьте бит exec

chmod +x ~/.config/autostart/my-xmodmap.desktop

В ~/.Xmodmapэтом случае команды xmodmap должны быть в файле (либо использовать -eопцию, либо выбрать другое имя файла!). Выйдите и вернитесь.

Обратите внимание, что вы можете создать стартовую программу из «Startup Applications».

Другим решением было бы забыть xmodmap и научиться настраивать xkb!

Изменить (снова)

Иногда, может быть, 25% входов в систему, xmodmapкажется, все еще не работает - в то время как команда фактически выполняется (трекер доказывает это). Единственный вывод, к которому я мог бы прийти в это время, состоит в том, что xkbпроцесс действительно запаздывает в процессе входа в систему и может завершиться после его xmodmapзапуска. Выглядит как состояние гонки ... Итак, наконец, я изменил execстроку файла автозапуска рабочего стола на

Exec=$HOME/bin/mystart &

(обратите внимание, &) mystartэто скрипт в новом каталоге, который binя создал, который содержит

#!/bin/bash    
sleep 5
/usr/bin/xmodmap /home/me/.Xmodmap &
date >> /tmp/xmodmap-has-run

и

chmod u+x ~/bin/mystart

Сценарий спит 5 секунд, прежде чем запустить xmodmap, и отслеживает его запуск (в файле /tmp/xmodmap-has-run).

Надеюсь, это все!

Кольцо Ø
источник
Редактирование конфуторации xkb работало на меня: askubuntu.com/a/1090892/1021380
пострациональное
2

Вот, возможно, лучший ответ тогда: http://cweiske.de/howto/xmodmap/ar01s06.html

Возможно, вам придется немного подправить его, чтобы работать на вас, но инструкции все есть.

Роберт Массайоли
источник
1
Эта инструкция для KDE, но если я посмотрю на эквивалент Gnome ( /etc/gdm/Xsession), строки, которые говорит добавить, уже есть в нем.
Мэтью
2

Возможно, у вас есть синтаксическая ошибка в вашем ~/.Xmodmapфайле?

Попробуйте запустить:

$ xmodmap ~/.Xmodmap

Это должно вызвать ошибку, если таковые имеются.

gpmcadam
источник
0

У меня была такая же странная проблема, когда я пытался запустить свой Xmodmap при входе в сеанс (ubuntu 13.04). Я наконец заставил его работать с файлом .xinitrc в моей домашней папке, куда я положил свою команду, но с абсолютными путями к ней, то есть:

/ usr / bin / xmodmap /home/MYNAME/.Xmodmap

Затем мне пришлось перезагрузить компьютер (а не просто заново), чтобы он был выполнен.

greguti
источник
2
Это не работает под Ubuntu 14.04, для меня.
miguel.martin