Вопрос или проблема
Как подключить две физические клавиатуры к нашему компьютеру и установить для каждой из них разные раскладки?
Принятый ответ на этот вопрос, заданный 11 лет назад, видимо, не работает для Wayland.
Когда я выполняю xinput -list | grep key
, я получаю следующий вывод с предупреждением. Также не отображаются две подключенные физические клавиатуры.
WARNING: running xinput against an Xwayland server. See the xinput man page for details.
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ xwayland-keyboard:17 id=9 [slave keyboard (3)]
Выполнение команды sudo libinput.list-devices
на самом деле отображает клавиатуры
Device: Dell KB216 Wired Keyboard
Kernel: /dev/input/event16
Group: 5
Seat: seat0, default
Capabilities: keyboard
Tap-to-click: n/a
Tap-and-drag: n/a
Tap drag lock: n/a
Left-handed: n/a
Nat.scrolling: n/a
Middle emulation: n/a
Calibration: n/a
Scroll methods: none
Click methods: none
Disable-w-typing: n/a
Accel profiles: n/a
Rotation: n/a
Device: AT Translated Set 2 keyboard
Kernel: /dev/input/event3
Group: 10
Seat: seat0, default
Capabilities: keyboard
Tap-to-click: n/a
Tap-and-drag: n/a
Tap drag lock: n/a
Left-handed: n/a
Nat.scrolling: n/a
Middle emulation: n/a
Calibration: n/a
Scroll methods: none
Click methods: none
Disable-w-typing: n/a
Accel profiles: n/a
Rotation: n/a
Как мне настроить, чтобы AT Translated Set 2 keyboard
имела финскую раскладку, а Dell KB216 Wired Keyboard
имела американскую раскладку? Я использую Ubuntu 24.10.
Ответ или решение
Настройка разных раскладок для двух клавиатур в среде Wayland — это нетривиальная задача, связанная с основными изменениями в управлении вводом в системе. В отличие от Xorg, где подобная задача могла быть решена с помощью утилит вроде setxkbmap
и xinput
, Wayland работает с вводом несколько иным образом. Давайте разберемся, как можно добиться желаемого поведения с учетом контекста, который вы предоставили.
Теория
Wayland — это протокол для композитных серверов, который был разработан как альтернатива X11 для обеспечения более производительной и безопасной графической подсистемы. В отличие от X11, Wayland не имеет собственного концепта глобального серверного процесса ввода, а ввод обрабатывается проще и непосредственно: каждый клиент (приложение) взаимодействует с аппаратными элементами ввода через средства конкретного композитного сервера (например, Mutter для GNOME, KWin для KDE и др.).
В этом случае, libinput выступает как интерфейс между ядром Linux и сервером Wayland, обрабатывая все аппаратные события ввода. Для различных устройств ввода libinput обеспечивает взаимодействие с помощьюорганизации событий в поток, но без возможности прямого управления раскладками клавиатуры. Это значит, что ключевой роль здесь играет композитный сервер, который управляет поведением и настройками устройств ввода.
Пример
Рассмотрим, как это может быть реализовано в различных композитных серверах:
-
GNOME (Mutter): GNOME на Wayland по умолчанию не поддерживает возможность настройки разных раскладок для разных клавиатур. Однако существует возможность использовать расширение GNOME или специальное конфигурационное решение, которое позволит изменить поведение в соответствии с вашими нуждами.
-
KDE (Plasma/KWin): В KDE имеются более гибкие настройки для вывода, и теоретически возможно использование скриптов или даже написание плазмоидов для обработки таких ситуаций.
-
Другие: Например, Sway — это композитный сервер Wayland, в чем-то схожий с i3. Sway допускает более сложные настройки через конфигурационные файлы, и с ним можно добиться более гибкого управления устройствами ввода.
Применение
Шаги для реализации на GNOME:
-
Установка и настройка окружения:
- Убедитесь, что все системные пакеты актуальны и GNOME используется в режиме Wayland.
-
Конфигурация libinput:
- Загрузите список устройств, используя
sudo libinput list-devices
, чтобы убедиться в правильной идентификации ваших клавиатур. - Поскольку libinput не управляет непосредственно раскладками, этот шаг лишь подтвердит правильность идентификации оборудования.
- Загрузите список устройств, используя
-
Использование GNOME Extensions:
- Попробуйте установить расширение, такое как "Keyboard Layout Per App", если оно доступно для вашей версии GNOME. Это позволит вам настроить разные раскладки для разных приложений, что может быть альтернативным решением.
-
Поиск специализированных решений:
- Наиболее специализированное решение может потребовать создания пользовательского демона или использования скриптов на уровне сессии, которые будут переключать раскладки в зависимости от активного устройства. Вы можете исследовать доступные решения в сообществе или обратиться к документации разработчиков GNOME.
-
Написание собственного скрипта:
- В качестве глубокого решения вы можете написать пользовательский скрипт на Python или Bash, использующий интерфейсы DBus и libinput для прослушивания событий ввода и изменения раскладок на лету. Это сложный путь, так как потребуется хорошее понимание системных вызовов и внутреннего устройства композитного сервера.
Шаги для реализации на Sway:
-
Установка Sway:
- Если на вашем Ubuntu 24.10 установлен другой композитный сервер, установите Sway, чтобы воспользоваться его расширенными возможностями настройки устройств ввода.
-
Конфигурационный файл Sway:
- Откройте или создайте конфигурационный файл
~/.config/sway/config
. -
Добавьте настройки для ваших клавиатур. Например:
input "3:1:Dell_KB216_Wired_Keyboard" { xkb_layout "us" } input "1:1:AT_Translated_Set_2_keyboard" { xkb_layout "fi" }
- Здесь
3:1:Dell_KB216_Wired_Keyboard
и1:1:AT_Translated_Set_2_keyboard
— идентификаторы устройств, которые можно получить с помощьюswaymsg -t get_inputs
.
- Откройте или создайте конфигурационный файл
-
Перезапуск Sway:
- После внесения изменений, перезапустите Sway с новой конфигурацией.
Таким образом, настройка разных раскладок для двух физически подключенных клавиатур под Wayland зависит от возможностей композитного сервера, где наибольшая гибкость наблюдается у таких регулируемых серверов, как Sway. Воспользовавшись вышеописанными методами, вы сможете настроить системы ввода под ваши нужды в рамках текущих возможностей Wayland.