Evitar que se restablezca la distribución del teclado cuando el teclado USB está conectado

Evitar que se restablezca la distribución del teclado cuando el teclado USB está conectado

Cada vez que conecto un teclado USB, el diseño de todos los teclados se restablece a algún valor predeterminado del sistema (un diseño de EE. UU. que no tiene modificadores ni otras teclas como yo quiero). He observado esto en muchos sistemas Debian y Ubuntu, incluidos Ubuntu 16.04 y 18.04. Este comportamientoha existido por mucho tiempo.

Utilizo X11 sin entorno de escritorio (aunque algunos demonios de Gnome tienden a empezar). Configuré la distribución de mi teclado con XKB (específicamente … | xkbcomp - "$DISPLAY") cuando inicio sesión.

Cuando inserto un teclado USB, quiero que tenga mi diseño, no el diseño del sistema. De hecho, desearía que el sistema siguiera usando mi diseño actual tanto para los teclados ya presentes, si los hubiera, como para el teclado recién insertado. Si eso no es posible, me conformaría con volver a aplicar un diseño queIeligió.

Del mismo modo, la tasa de repetición en ambos teclados está configurada en el valor predeterminado de tiempo de inicio de sesión en lugar de la tasa que configuré con xset r.

¿Cómo puedo evitar que un teclado hotplug restablezca la distribución del teclado y la frecuencia de repetición?O en su defecto, ¿cómo puedo al menos restablecerlo al diseño elegido?

Hay una manera bastante torpe que escon una regla udev. Es torpe porque supone que hay un único servidor X y, lo que es más problemático, supone que el usuario tiene permiso de root.No tengo permisos de root, por lo que cualquier método que implique establecer reglas de udev o editar Xorg.confno es aplicable aquí.

Respuesta1

Configuré la distribución de mi teclado con XKB (específicamente… | xkbcomp - "$DISPLAY") cuando inicio sesión.

¿Cómo puedo evitar que un teclado hotplug restablezca la distribución del teclado y la frecuencia de repetición?

No es que lo resetee. Si ya tiene un teclado conectado y está agregando uno segundo, el teclado anterior seguirá usando la misma configuración.

El problema es que la forma del lado del cliente de cargar una configuración xkb (con xkbcomp) o del lado del servidor (con setxkbmap) solo aplicará el diseño a los dispositivos reales existentes, no a la abstracción del "Teclado central". Cuando se desconecta un dispositivo, se pierde su configuración.

La solución es controlarse usted mismo cuando se agrega un teclado y llamar a xkbcomp/ setxkbmapy xset r ratecon su configuración preferida.

Para eso lo hacesnonecesita alguna regla udev o privilegios de root;cualquierEl programa cliente X11 puede monitorear los cambios en los dispositivos de entrada a través de la extensión de entrada X11 y actuar en consecuencia.

Un programa que se puede usar desde el shell para eso y que se puede instalar fácilmente en apt-getDebian y distribuciones similares es inputplug.

Ejemplo:

$ cat ./on-new-kbd
#! /bin/sh
keymap=/path/to/your/keymap

echo >&2 "$@"
event=$1 id=$2 type=$3

case "$event $type" in
'XIDeviceEnabled XISlaveKeyboard')
        xset r rate 200 50
        xkbcomp -i "$id" "$keymap" "$DISPLAY"
esac

$ chmod 755 ./on-new-kbd

$ inputplug -d -c ./on-new-kbd

<plug keyboard>

XIDeviceEnabled 13 XISlavePointer GASIA USB KB V11
XISlaveAdded 13 XIFloatingSlave GASIA USB KB V11
XISlaveAdded 14 XIFloatingSlave GASIA USB KB V11
XIDeviceEnabled 14 XISlaveKeyboard GASIA USB KB V11

Observe la -iopción de xkbcomp: puede usar diferentes configuraciones para cada teclado. El protocolo también permite configurar la tasa de repetición por dispositivo, pero no sé cómo hacerlo con xset.

Por supuesto, su administrador de ventanas/entorno de escritorio puede escuchar esos eventos y anular su configuración.

Respuesta2

Me encontré con el mismo problema al usar un conmutador USB para compartir un teclado entre dos sistemas. Cuando vuelvo a cambiar a mi sistema Pop!_OS 20.04 LTS, un sistema derivado de Debian/Ubuntu, la configuración desaparece. He estado usando gnome-tweakset Caps Lockpara actuar como un archivo Ctrl.

Este es el escenario que siguió funcionando mal para mí. Encontré esta forma de línea de comando para configurarlo como quiero para no tener que seguir ejecutando gnome-tweakpara solucionar el problema.

dconf write  /org/gnome/desktop/input-sources/xkb-options "['caps:ctrl_modifier']"

La página de manual paraxkeyboard-configtiene una lista de valores permitidos xkb-optionsjunto con breves descripciones.

No sé cómo evitar que ocurra el problema, pero es menos molesto ahora que puedo solucionarlo desde la línea de comando.

información relacionada