7

Из-за кофейной аварии некоторые номера клавиатуры моего ноутбука перестали работать. Я использовал xmodmap для использования F1, F2 и т.д. В качестве замены и сохранил конфиги в ~/.Xmodmap .

Однако это вызвало несколько проблем.

  1. Я не всегда использую X на этом компьютере, и без запуска X xmodmap не применяется.

  2. Это заставляет X запускаться дольше.

  3. По какой-то причине это привело к тому, что сочетания клавиш XFCE, которые не имели никакого отношения к клавишам, измененным через xmodmap перестали работать (фактически все сочетания клавиш перестали работать, кроме сочетаний клавиш менеджера окон). Через несколько минут после запуска X ярлыки XFCE снова начинают работать нормально! Это отставание не очень раздражает, но также является проблемой.

Я полагаю, что есть какое-то отображение, которое ОС читает перед запуском X. Разве нет способа изменить это отображение? Есть ли способ изменить раскладку клавиатуры без использования инструментов X? Я использую стабильную версию Debian.

PS: видимо файл, который вызывает xmodmap .Xmodmap на startx - это /etc/xdg/xfce4/xinitrc . Его содержимое можно найти здесь .

2 ответа2

20

Во-первых, хорошие новости

Системная консоль Linux абсолютно имеет свой собственный набор клавиатурных сопоставлений, которыми можно управлять с помощью инструментов из пакета kbd , в частности, dumpkeys и showkey для обнаружения и loadkeys для загрузки в настраиваемом отображении. Вопрос суперпользователя Как изменить раскладку консоли в Linux? имеет ответ с хорошей информацией о том, как использовать эти инструменты.

Теперь плохие новости

Хотя это правда, что эти инструменты позволят вам переназначить ключи на консоли Linux, не задействуя xmodmap и не требуя запуска X, они будут влиять только на сопоставления клавиш на виртуальной текстовой консоли. Изменения не окажут абсолютно никакого влияния в графической среде, поскольку система XInput/evdev X считывает данные непосредственно с устройств ввода и выполняет свою собственную обработку.

Так что, если вы надеетесь избежать использования xmodmap , просто переназначив его на консоль и применив его везде, я боюсь, что это не сработает. На самом деле, вам нужно переназначить как консоль ( с помощью loadkeys и X11 (используя метод , как xmodmap чтобы использовать ту же раскладку клавиатуры везде.

Решением медленной (и ошибочной) xmodmap (поскольку ее переназначения являются сбойными и непостоянными в средах рабочего стола, использующих переключение раскладок) было бы определение совершенно новой раскладки клавиатуры, основанной на любой раскладке, которую вы ранее использовали, вместо применения среды выполнения модификаций. При запуске X вы загружаете этот новый, переназначенный макет вместо того, что вы используете сейчас. (Похоже, что теперь это единственный способ надежно изменить раскладку клавиатуры в последних Ubuntus - и, возможно, в других дистрибутивах - поскольку их xmodmap больше не нужен.)

Для получения информации об определении и использовании пользовательской раскладки клавиатуры xkb см .:

  1. Howto: пользовательские определения раскладки клавиатуры в вики сообщества Ubuntu.
  2. Как изменить раскладку клавиатуры в Linux, сообщение в блоге Романо Джаннетти.

Оба были написаны в этом году (2014), поэтому информация должна быть актуальной. Вики-информация Ubuntu должна быть применима к большинству дистрибутивов, так как все они используют систему xkb в X.

1

На самом деле существуют способы переназначения на уровне, достаточно низком, чтобы применить его ко всей системе, X11 или нет, и они стали более важными, чем когда-либо, теперь, когда мы наблюдаем внедрение композиторов Wayland, которые не предоставляют пользовательский интерфейс для переназначения libinput служба поддержки.

В основном вам нужно перенастроить, как входной уровень ядра преобразует необработанные коды сканирования в коды клавиш, прежде чем они достигнут консоли или API evdev, над которым располагаются X11 и Wayland.

Я знаю два способа сделать это:

  1. Измените запись аппаратной базы данных (hwdb) для вашей клавиатуры. udev позволяет вам сделать это, добавив файлы правил в /etc/udev/hwdb.d/ и инициировав перестройку базы данных с systemd-hwdb update , а затем принудительно применив ее без перезапуска через udevadm trigger .

    Эта страница ArchiWiki содержит подробные инструкции и явно говорит, что она будет работать как для X11, так и для ввода с консоли.

  2. Существует демон с именем evdevremapkeys, который был специально написан для переназначения ключевых событий на устройствах evdev для поддержки переназначения monkey-patch в клиентах evdev, которые их не поддерживают, например, в Wayland compositors.

    В основном он использует тот же подход, что и драйверы пользовательского пространства, такие как G15Daemon, которые должны компенсировать нестандартные устройства ввода. (Откройте устройство evdev, проглотите все события, которые оно намеревается переназначить, чтобы никто, слушающий устройство, не смог их увидеть, затем сгенерируйте исправленные события через API uinput для создания устройств ввода уровня ядра из пространства пользователя.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .