Я не могу заставить xmodmap работать при входе в Ubuntu 13.04. Я искал вокруг, в том числе в Askubuntu, и все ответы, которые я нашел, не работают.
У меня есть файл с именем .Xmodmap в моей домашней папке, который содержит нужные отображения. Если я запускаю его вручную, он работает нормально, поэтому там нет ошибок. Чтобы запустить его при запуске, я попытался:
Используя различные .xinitrc
, содержащие одну из следующих команд:
xmodmap .Xmodmap
[ 1126] xmodmap ~/.Xmodmap
/usr/bin/xmodmap /home/NAME/.Xmodmap
if [ -s ~/.Xmodmap ]; then
xmodmap ~/.Xmodmap
fi
Использование .Xresources
вместо .xinitrc
с такими же вариациями.
Установка его в качестве запускаемого приложения.
Ничто из вышеперечисленного не работает в Ubuntu 13.04 (64-битная версия). Я также видел несколько идей о глобальном изменении раскладок клавиатуры, но большинство из них не были применимы в Ubuntu 13.04 (то есть, соответствующие файлы не существовали там, где были указаны), и я все равно предпочитаю не трогать глобальные настройки.
Для меня конфигурация xkb слишком сложна, если вы хотите переназначить 1 или 2 ключа способом, недоступным в Системных настройках. Кроме того, решение должно оставаться на стороне пользователя, без редактирования '/ usr / share / X11 / xkb / symbols /' и т. Д. Принудительная загрузка 'xmodmap ~ / .Xmodmap' с помощью автозагрузки приложений работает только до тех пор, пока вы не приостановите, не смените пользователей. или измените раскладку клавиатуры. Итак, как предполагает holocronweaver, с помощью фрагментов кода, которые я обнаружил, я создал скрипт python для загрузки при запуске сеанса, который при необходимости перезагружает файл «~ / .Xmodmap».
Проверьте сообщение об ошибке № 1243642 (комментарий № 6) и загрузите его здесь .
У меня была эта проблема в Ubuntu 14.04, и я нашел решение здесь . Судя по всему, Ubuntu не может настроить клавиатуру сразу после входа в систему, но это немного позже. Поэтому, если вы добавите команду
sleep 4 && xmodmap ~/.Xmodmap &
в ~/.bash_profile
, то она должна работать (она мне подходит).
РЕДАКТИРОВАТЬ: Кажется, это работает только после входа в систему, а не после запуска. Я должен буду исследовать это позже.
Ubuntu больше не использует xmodmap
, а вместо этого использует xkb
(насколько я понимаю, это облегчает раскладку клавиатуры для каждого окна, среди прочего).
Общесистемные файлы карт находятся в
/usr/share/X11/xkb/symbols/
Карты, по-видимому, загружаются иерархически, с картой pc
в качестве корня и любым языком (например, en
) в качестве дочернего. корня.
В моем конкретном случае я физически поменял местами Page Up с Home и Page Down с End на своей клавиатуре, поэтому я очень грубо внес изменения в общесистемную карту pc
следующим образом:
key <HOME> { [ Prior ] };
key <PGUP> { [ Home ] };
key <END> { [ Next ] };
key <PGDN> { [ End ] };
[ 1115] ПРИМЕЧАНИЕ. Чтобы заставить Xorg использовать вашу новую карту клавиатуры, вам, возможно, придется удалить существующие предварительно скомпилированные карты (* .xkm) в
/var/lib/xkb/
и затем перезапустить Xorg .
На xkb
имеются различные ресурсы, но этот связан с Ubuntu.
Я имел проблему также на Ubuntu 16.04 с fcitx и имел решение на fcitx Wiki, но этому нужен fcitx, имеет 4.2.7 или позже
touch ~/.Xmodmap
Там также имеют некоторое объяснение по причине.
vim
использования Вот мой вариант сценария запуска сопоставления клавиш. Он преобразует Caps Lock kbd> в Esc kbd> на любой клавиатуре для использования с vi
, vim
или gvim
.
В отличие от ответа из q4w56 , в этом ответе не используется бесконечный цикл while; do
. В противном случае одно ядро моего двухъядерного процессора будет сбивать 42% каждые 5 секунд, что серьезно снизит заряд батареи моего ноутбука.
#!/bin/bash
sleep 4
xmodmap -e "clear Lock"
xmodmap -e "keysym Caps_Lock = Escape"
Сохраните его как скрипт. Сделайте файл исполняемым с помощью chmod +x
. Добавьте имя и местоположение скрипта в Session and Startup → Application Autostart
(в Xubuntu).
Поведение клавиатуры для этого пользователя останется постоянным после перезагрузки и выхода из системы, но не будет приостановлено. Устойчивость посредством приостановки может быть достигнута , но, к сожалению, только на системном уровне, а не на уровне пользователя.
В современном компьютерном мире очень мало пользы для клавиши Caps Lock kbd>. В общем, следует воздерживаться от использования ALL CAPS в силу как сетевого этикета , так и для разделения представления и содержания . Более того, случайное нажатие клавиши Caps Lock kbd> при редактировании текста с помощью vim
не всегда сразу отмечается, но неизменно приводит к раздражающему vim
поведению в дальнейшем. Отключение клавиши Caps Lock kbd> все вместе и использование ее в качестве легкодоступной клавиши Esc kbd> приводит к двойному выигрышу для использования vim
.
@ Ответ Даниэля указал мне верный путь, но я хотел бы остановиться на нем.
У меня работает на Linux Mint 17.2 и Ubuntu 16.04.
Я попробовал все повороты, которые только мог придумать, чтобы использовать xmodmap
, но все они терпят неудачу, когда система переходит в режим сна. То же самое справедливо и для сценариев запуска приложений, которые используют setxkbmap
в тех случаях, когда демон * settings (для меня это xfce4) запускается позже, чем сценарий - и порядок не может повлиять.
То, что я наконец-то придумал, имеет следующие ингредиенты:
1) Напишите минимальный файл сопоставления клавиатуры для /usr/share/X11/xkb/symbols
. Позволяет назвать файл mylayout
. Это может быть так просто, как
xkb_symbols "basic" {
name[Group1] = "My Layout";
include "us"
key <AE03> { [ 3, numbersign, sterling, sterling] };
include "level3(ralt_switch)"
}
basic
- просто имя, мы встретимся с ним позже. name[Group1]
аналогично это просто имя, которое кажется, но позже оно не сыграет никакой роли. include "us"
включает в себя простую клавиатуру США. На самом деле us
- это другой файл в том же каталоге. Это раскладка клавиатуры, которую мы адаптируем. Выберите другой по мере необходимости. Примечание: нет точки с запятой в конце этой строки. key
- это одна из модификаций клавиатуры, за которой может следовать больше. <AE03>
можно найти в файлах под /usr/share/X11/xkb/keycodes
. Используйте программу xev
, чтобы выяснить, что клавиша «3» имеет код клавиши 12, а в файле кодов клавиш Xfree86
она сопоставлена с <AE03>
. include
для активации другой опции клавиатуры, в данном случае я хочу, чтобы правая клавиша Alt была клавишей Shift уровня 3, то есть клавишей, которая дает доступ к знаку sterling
, который я определил. выше. level3
- это просто имя файла в той же папке с ralt_switch
одним его разделом. Посмотрите вокруг и выберите, что вам нужно включить. 2) Я не поместил mylayout
в системную папку. Скорее я сделал только мягкую ссылку из системной папки на папку, которая мне нравится, чтобы сразу увидеть, что это не стандартное программное обеспечение.
3) Далее я не исправил evdev.xml
, опять же, чтобы избежать проблем с обновлением. Но это необходимо для поиска mylayout в редакторе конфигурации клавиатуры (для xfce4 это xfce4-keyboard-settings
). Вместо этого я использовал xfce4-settings-editor
и изменил keyboard-layout->XkbLayout
на mylayout
(имя файла) и XkbVariant
на basic
(см. Выше). После этого mylayout/basic
также отображается в редакторе настроек клавиатуры. Кажется, что запись в evdev.xml
необходима только для того, чтобы можно было выбрать макет.
Таким образом, настройки клавиатуры теперь выживают в спящем режиме и перезагружаются.
Дополнительную информацию можно найти здесь: http://www.charvolant.org/~doug/xkb/html/node5.html .
Другой подход к исправлению режима сна проблему (сам не пробовал), можно найти здесь: https://www.vinc17.net/unix/xkb.en.html .
ОБНОВЛЕНИЕ: работал с Mint 18.3 тоже самое В тот момент, когда я изменил настройки в xfce4-settings-editor, как описано выше.
ПЕРЕСМОТР
Обновление в начале 2018 года повредило персистентность - автоперезагрузка контурной карты после приостанавливает или в спящем режиме. Так как методы с помощью/etc/pm/sleep.d сценарии прекратили работать (удержанный от использования?), который оставил только более новый путь, с помощью/lib/systemd/system-sleep и немного отличающиеся сценарии (который начал работать над контурными картами!).
Таким образом, это сообщение обновляется к более новому методу для персистентности, и включать нормальную начальную загрузку контурной карты, которая также начала работать. Стандартная программа для преобразования.Xmodmap файла к .xkbmap остается неизменной.
Обратите внимание, что это - решение в расчете на пользователя. Для ответа для каждого устройства посмотрите, как применить контурную карту к единому устройству. Этот метод мог быть адаптирован к использованию здесь.
Сначала измените.Xmodmap файл, как желаемый. Их легче отредактировать непосредственно, чем .xkbmap файлы. Когда это загружается:
xmodmap.Xmodmap
затем преобразуйте в .xkb файл:
$DISPLAY$HOME/.xkbmap xkbcomp
Чтобы автоматически загрузиться на запуске, откройте Startup Applications, нажмите Add, и на Командной строке войдите:
xkbcomp/home/user/.xkbmap ":0"
("пользователь" заменяется фактическим именем пользователя.) Для Имени, возможно, введите Карту Клавиатуры Загрузки. Добавьте комментарий при желании и совершите нападки, Сохраняют.
Контурная карта теперь загрузит каждый раз начальные загрузки системы, но не переживет приостанавливание или будет в спящем режиме. Для этого создайте новый файл в/lib/systemd/system-sleep, возможно, названный 60_xkbmap, который содержит:
#!/bin/sh
case $1/$2 in
pre/*)
# Place pre-suspend commands here
exit 0
;;
post/*)
# Place post-suspend commands here
export DISPLAY=":0"
export XAUTHORITY="/home/user/.Xauthority"
su user -c "xkbcomp /home/user/.xkb/xkb-map $DISPLAY 2>/dev/null"
;;
esac
(Касательно). Как выше, замена "пользователь" с фактическим именем пользователя.
Контурная карта должна теперь автоматически загрузиться и остаться персистентной.Примечание:
Это также заставило меня запнуться, когда я обновил Ubuntu с 12.04 до 13.04.
К счастью, этот параметр теперь (или, возможно, всегда) был легко доступен в настройках клавиатуры и может быть изменен несколькими щелчками мыши.
Вот и все: левый регулятор и Caps Lock поменялись местами.
Не забудьте удалить ~/.Xmodmap
после внесения изменений.
Я считаю, что добавление этого скрипта в автозагрузку удовлетворяет:
while true;do
xmodmap -e "keycode 87=Prior"
xmodmap -e "keycode 88=Next"
sleep 5
done
Я пытался использовать xmodmap ./Xmodmap
, но каждый раз, когда он выполняется, будет происходить заметная задержка.
Шаги, упомянутые в принятом ответе (также описанные здесь), являются постоянным решением, но у меня не сработало в случае изменения буквенных клавиш.
Если вы разочаровались, попробовав другие варианты, или хотите сэкономить время, попробуйте выполнить шаги, упомянутые в статье — https://medium.com/@saplos123456/persistent-keyboard-mapping-on-ubuntu- using-xmodmap-cd01ad828fcd
xmodmap
. xmodmap -pke > .Xmodmap
gedit .Xmodmap
xmodmap .Xmodmap
xkbcomp $DISPLAY $HOME/.xkbmap
xkbcomp /home/user/.xkbmap ":0" // if you followed the 4th step
OR
xmodmap .Xmodmap // if you skipped the 4th step
другие решения загружают xmodmap
при запуске сеанса (или раньше), но затем ваши настройки стираются при подключении новой клавиатуры (или переключении переключателя KVM). Вот решение, которое переустанавливает xmodmap
после подключения USB-устройства. Я использую его с тех пор, как в Linux появилась вся путаница Alt/Meta (примерно в 2006 году).
! ~/.Xmodmap file
!
! Part 1 (since about 2006)
! Avoid BadValue (TODO: debug why we get BadValue otherwise)
clear mod1
clear mod4
! Actually, my keyboard doesn't have 0xcc/0xcd keys, thank you...
keycode 0xcc = NoSymbol
keycode 0xcd = NoSymbol
! mod3 is Alt. I'm sure this is documented somewhere.
! It works that way in every program!
add mod3 = Alt_L
add mod3 = Alt_R
! In addition to Alt keys, my keyboard has ... drumroll ... *Windows* keys!
! These are *Meta* keys. Say, in Windows web browsers.
! Don't take my word for it, hit F12 and type:
! onkeydown = function(e){console.log(e);}
! And, um, Alt is already taken, so obviously Meta = Windows key.
! Also Windows keys = Meta in some FreeBSD distros out of the box.
! Is Windows keys = Meta not clear to someone, or is someone just being annoying
! with all this "Alt = Meta" garbage?
keycode 0x85 = Meta_L
keycode 0x86 = Meta_R
! No, mod1 is not Alt!
! In every program, mod1 is actually meta!
add mod1 = Meta_L
add mod1 = Meta_R
remove mod1 = Alt_L
remove mod1 = Alt_R
! Part 2 (since about 2015)
! What is going on?? USB thinks it can just wipe my xmodmap???
!
! 1. Locate xkb rulefile using
!
! udevadm control --log-priority=info
!
!
! It will be something like
!
! /lib/udev/rules.d/64-xorg-xkb.rules
!
!
! 2. Edit /lib/udev/rules.d/64-xorg-xkb.rules. Add:
!
! RUN += "/big/usb_fix.sh"
!
! and do:
!
! udevadm control --reload-rules
!
! note: using /big is intentional... on new Ubuntus, the system dies
! with "a start job is running..." in disk mounting. So we prevent this
! script from running ig /big is not mounted yet.
!
!
! 3. Create the /big/usb_fix.sh script:
!
! #!/bin/sh
! echo "xmodmap ~/.Xmodmap" >> /usr/local/usb_fix.log
!
! and make it executable.
!
!
! 4.
! mkfifo /usr/local/usb_fix.log
!
!
! 5.
! Create a script (e.g. named ~/bin/usb_fix_client)
!
! #!/bin/sh
! yes 'cat /usr/local/usb_fix.log | sh' | sh
!
! and put this in your .xinitrc.
! Part 3 (since about 2018)
!
! Every now and then, apt-get can overwrite the xorg-xkb-rules?
! solution for now is turn off automatic updates.
Если вы настроили его правильно, xmodmap должен сказать:
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Meta_L (0x85), Meta_R (0x86)
mod2 Num_Lock (0x4d)
mod3 Alt_L (0x40), Alt_R (0x6c)
mod4
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
И вуаля, ваши клавиши meta и alt работают!
Если слишком сложно найти и отключить любое программное обеспечение, которое перезаписывает ваши правила USB (для меня какое-то программное обеспечение приходит и стирает его примерно два раза в год), то просто добавьте сценарий RC, чтобы скопировать ваши правила USB обратно. Кроме того, вы можете скопировать свои улучшенные правила в файл с большим номером перед ним, чтобы он переопределял любые другие причуды, которые появятся, стирая ваш xmodmap в будущем.