Постоянный xmodmap в Ubuntu 13.04

64

Я не могу запустить xmodmap при входе в Ubuntu 13.04. Я искал вокруг, в том числе в askubuntu, и все ответы, которые я нашел, не работают.

У меня есть файл с именем .Xmodmap в моей домашней папке, который содержит нужные сопоставления. Если я запускаю его вручную, он отлично работает, поэтому там нет ошибок. Чтобы запустить его при запуске, я попытался:

  1. Используя различные .xinitrc , содержащие одну из следующих команд:

    • xmodmap .Xmodmap
    • xmodmap ~/.Xmodmap
    • /usr/bin/xmodmap /home/NAME/.Xmodmap
    • if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
      fi
  2. Использование .Xresources вместо .xinitrc с теми же изменениями.

  3. Установка его в качестве приложения для запуска.

Ничего из вышеперечисленного не работает в Ubuntu 13.04 (64-разрядная версия). Я также видел несколько идей о глобальном изменении сопоставлений клавиатуры, но большинство из них не были применимы в Ubuntu 13.04 (т. Е. Соответствующие файлы не существовали там, где они указаны), и я предпочитаю вообще не касаться глобальных настроек.     

задан Alexander Karatarakis 27.07.2013 в 14:37
источник

9 ответов

71

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

Общесистемные файлы карт находятся в

/usr/share/X11/xkb/symbols/

Карты, по-видимому, загружаются иерархически, а в качестве корня отображается карта pc и любой язык (например, en ) в качестве дочернего элемента корня.

В моем конкретном случае я физически менял на свою клавиатуру страницу «Вверх» с «Домой» и «Начать вниз», поэтому я очень грубо вносил изменения в общесистемную карту pc следующим образом:

 key <HOME> {    [  Prior        ]   };
 key <PGUP> {    [  Home         ]   };
 key  <END> {    [  Next         ]   };
 key <PGDN> {    [  End          ]   };

ПРИМЕЧАНИЕ. Чтобы заставить Xorg использовать новую карту клавиатуры, вам может потребоваться удалить существующие предварительно скомпилированные карты (* .xkm) в

/var/lib/xkb/

, а затем перезапустите Xorg.

Существуют различные ресурсы на xkb , но этот связан с Ubuntu.

    
ответ дан Daniel 19.09.2013 в 09:08
источник
12

Для меня конфигурация xkb слишком сложна, если вы хотите переназначить 1 или 2 клавиши таким образом, который недоступен в настройках системы. Кроме того, решение должно оставаться на стороне пользователя без редактирования «/ usr / share / X11 / xkb / symbols /» и т. Д. Принудительная загрузка «xmodmap ~ / .Xmodmap» с использованием приложений для запуска работает только до тех пор, пока вы не приостановите, не измените пользователей или изменить раскладку клавиатуры. Итак, как предлагает голокорнер, с обнаруженными фрагментами кода я сделал скрипт python для загрузки при запуске сеанса, который при необходимости перезагружает '~ / .Xmodmap'.

Проверьте отчет об ошибке # 1243642 (комментарий № 6) и загрузите его здесь .     

ответ дан dedalu 21.08.2014 в 16:58
6

У меня была эта проблема в Ubuntu 14.04 и нашел решение здесь . По-видимому, Ubuntu не может сразу настроить клавиатуру после входа в систему, но немного позже. Поэтому, если вы добавите команду

sleep 4 && xmodmap ~/.Xmodmap &

до ~/.bash_profile , тогда он должен работать (это делается для меня).

EDIT: похоже, это работает только после входа в систему, а не после запуска. Мне придется исследовать это позже.

    
ответ дан dremodaris 11.09.2014 в 17:45
4

Преобразовать Caps Lock в Esc для использования vim

Вот мой вариант сценария запуска сопоставления ключей. Он преобразует Caps Lock в Esc на любой клавиатуре для использования с 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).

Поведение клавиатуры для этого пользователя будет оставаться постоянным при перезагрузке и выходе из системы, но не приостанавливаться. Настойчивость через suspend может быть достигнута , но, к сожалению, только на системном уровне, не легко на уровне пользователя.

Обоснование для переназначения клавиатуры

В сегодняшнем компьютерном мире для клавиши Caps Lock остается очень мало пользы. В общем, следует воздерживаться от использования ВСЕХ CAPS в силу как netiquette и разделение презентации и контента . Более того, случайное нажатие клавиши Caps Lock при редактировании текста с vim не всегда сразу отмечается, но неизменно приводит к скорее раздражающему действию vim поведения . Отключить ключ Caps Lock все вместе и перепроверить его как легкодоступный Esc ключ приводит к двойному выигрышу для использования vim .

    
ответ дан Serge Stroobandt 16.04.2016 в 23:22
3

У меня тоже была проблема с Ubuntu 16.04 с fcitx, и у меня было решение на fcitx wiki , но ему нужно, чтобы fcitx имел 4.2.7 или новее

  • touch ~/.Xmodmap
  • напишите конфигурацию
  • перезагрузка и fcitx попытается загрузить его автоматически

Также есть объяснение причины.

    
ответ дан Bluethon 08.06.2016 в 09:35
3

@ Ответ Даниила указал мне правильный путь, но я хотел бы остановиться на нем.

Работает для меня в Linux Mint 17.2 и Ubuntu 16.04.

Я пробовал все завихрения, которые я мог придумать, чтобы продолжать использовать xmodmap , но все они терпят неудачу, когда система переходит в спящий режим. То же самое и для сценариев запуска, которые используют setxkbmap в тех случаях, когда * settings-daemon (для меня это 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, а в файле keycodes Xfree86 сопоставляется с <AE03> .
  • Наконец, еще одна директива include для активации другой опции клавиатуры, в этом случае я хочу, чтобы правая клавиша Alt была клавишей сдвига уровня 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 необходима только для выбора макета.

Таким образом, теперь настройки клавиатуры сохраняются в спящем режиме и перезагружаются.

Дополнительную информацию можно найти здесь: Ссылка .

Другой подход к исправлению проблемы в режиме сна (не пробовал себя) можно найти здесь: Ссылка .

UPDATE: работал с Mint 18.3 в тот же момент, когда я изменил настройки в редакторе xfce4-settings, как описано выше.

    
ответ дан Harald 06.11.2016 в 13:09
2

ПЕРЕСМОТР

Обновление в начале 2018 года прервало сохранение - автоматическая перезагрузка раскладки клавиатуры после приостановки или спящего режима. Поскольку методы, использующие сценарии /etc/pm/sleep.d, перестали работать (устарели?), Это оставило только более новый способ, используя / lib / systemd / system-sleep и немного отличающиеся сценарии (которые начали работать с раскладками!).

Таким образом, этот пост обновляется до более нового метода для сохранения и включает в себя обычную начальную загрузку ключевой карты, которая также начала работать. Процедура преобразования файла .Xmodmap в .xkbmap остается неизменной.

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

Сначала измените файл .Xmodmap по желанию. Их проще редактировать напрямую, чем файлы .xkbmap. Когда он загружен:

xmodmap .Xmodmap

затем преобразуется в файл .xkb:

xkbcomp $DISPLAY $HOME/.xkbmap

Чтобы автозагрузка при запуске, откройте приложения для запуска, нажмите "Добавить", а в командной строке введите:

xkbcomp /home/user/.xkbmap ":0"

("пользователь" заменен фактическим именем пользователя.) Для Name, возможно, введите Load Keyboard Map. Добавьте комментарий, если хотите, и нажмите "Сохранить".

Ключ-карта теперь будет загружаться каждый раз, когда система загружается, но не сможет выдержать приостановление или спящий режим. Для этого создайте новый файл в / 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

( Ссылка ) Как указано выше, замените "пользователь" фактическим именем пользователя.

Ключ-карта теперь должна автоматически загружаться и оставаться постоянной. Примечание:

  • Относится к текущему выпуску LTS, 16.04 и, возможно, более поздним.
  • Взято из статьи 14 связанного с этим сообщения об ошибке.
  • Предыдущие комментарии, применяемые к оригинальному сообщению.
ответ дан u2n 08.12.2016 в 05:16
0

Это заставило меня споткнуться, когда я обновился с Ubuntu 12.04 до 13.04.

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

  1. Перейдите в Настройки системы > Разметка клавиатуры > <Сильный> Параметры ...
  2. В параметрах макета клавиатуры щелкните стрелку, чтобы открыть параметры ▸ Ctrl .
  3. Установите галочку в Сменить Ctrl и Caps Lock .

Там вы идете: Left Control и Caps Lock имеют переключаемые позиции.

Не забывайте удалять ~/.Xmodmap после внесения изменений.

    
ответ дан glts 05.10.2013 в 14:27
0

Я нахожу добавление этого скрипта к запуску, удовлетворяющему:

while true;do 
    xmodmap -e "keycode 87=Prior"
    xmodmap -e "keycode 88=Next"
    sleep 5
done

Я попытался использовать xmodmap ./Xmodmap , но каждый раз, когда он выполняется, появляется заметное отставание.

    
ответ дан golopot 23.10.2014 в 13:29