GNU/Linux >> Tutoriales Linux >  >> Linux

regla udev para cargar automáticamente la disposición del teclado cuando el teclado usb está conectado

Encontré una manera de evitar esto, aunque es un poco complicado.

Hoy llegué exactamente al mismo punto al intentar configurar dos teclados con udev, setxkbmap y xinput --list y que funcionen con conexión en caliente USB. Estoy cambiando las teclas, no cambiando el diseño, pero es lo mismo, una vez que haya identificado su teclado en un hotplug y pueda llamar condicionalmente a setxkbmap, entonces debería poder configurar el idioma solo del teclado que ha especificado . La lista de diseños de teclado se puede encontrar aquí ls -l /usr/share/kbd/keymaps/i386/ y puede encontrar el nombre de su dispositivo para continuar con xinput -list .

  1. Querrá reemplazar rizumu con su nombre de usuario, ya que descubrí que no era posible hacer esto sin ser explícito.
  2. Asegúrate de hacer grep en el your nombre del teclado.
  3. Usar lsusb para descubrir el ID de hardware que necesita configurar en la regla udev. Mi teclado das se ve así Bus 002 Device 009: ID 04d9:2013 Holtek Semiconductor, Inc.

Primero configuré la regla udev para detectar automáticamente el teclado creando una regla udev:

En el archivo /etc/udev/rules.d/00-usb-keyboards.rules :

ACTION=="add", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="2013", RUN+="/home/rizumu/bin/kbd_udev", OWNER="rizumu"

Tengo dos archivos ~/bin/kbd y ~/bin/kbd_udev. Asegúrate de que tengan los permisos correctos chmod 755 ~/bin/kbd*

El ~/bin/kbd_udev el guión contiene:

#!/bin/bash
/home/rizumu/bin/kbd &

Y notarás que todo lo que hace es llamar a ~/bin/kbd en segundo plano, para que udev pueda completar su proceso y activar el teclado. Dentro del ~/bin/kbd script dormimos por un segundo, porque necesitamos esperar hasta que el teclado se active para que podamos obtener la identificación del dispositivo usando xinput. Para lograr esto, configuré algunas variables y las exporté para que xinput setxkbmap pueda hacer su trabajo:DISPLAY , XAUTHORITY , HOME , y uno daskb_id para la identificación de mi daskeyboard:

#!/bin/bash
sleep 1
DISPLAY=":0.0"
HOME=/home/rizumu/
XAUTHORITY=$HOME/.Xauthority
export DISPLAY XAUTHORITY HOME
daskb_id=`xinput -list | grep -i 'daskeyboard' | grep -o id=[0-9]. | grep -o [0-9]. | head -1`

xset r rate 200 30
setxkbmap -layout colemak
setxkbmap -option ctrl:nocaps
if [ "${daskb_id}" ]; then
    setxkbmap -device "${daskb_id}" -option altwin:swap_lalt_lwin
fi

Dependiendo de su distribución, es posible que ya tenga una regla udev para teclados en /lib/udev/rules.d/64-xorg-xkb.rules. En Ubuntu, esto importa /etc/default/keyboard, que tiene opciones más o menos así:

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""

Para mi configuración, descubrí que esta regla integrada se ejecutaba después de mi regla udev personalizada y anulaba mi configuración. En cambio, cambié XKBOPTIONS en /etc/default/keyboard para que sea:

XKBOPTIONS="-option ctrl:nocaps"

Para obtener el comportamiento "Bloqueo de mayúsculas es control" que quería en todos los teclados.


Si está ejecutando GNOME, deberá deshabilitar su complemento de administración de teclado para que no anule los cambios de diseño.

gconftool-2 --toggle /apps/gnome_settings_daemon/plugins/keyboard/active

Vuelva a ejecutar el mismo comando para habilitarlo como desee.


Linux
  1. ¿Cómo activar un evento en el script de Shell cuando se quita un dispositivo USB?

  2. Cómo ejecutar un script cuando se conectan o eliminan dispositivos USB mediante UDEV

  3. Disposición del teclado Xephyr

  4. Uso de reglas udev para ejecutar un script en la inserción USB

  5. Cambiar el diseño del teclado de GRUB en la etapa 1

Deshabilitar automáticamente el panel táctil cuando el mouse está conectado en GNOME

Arreglar el diseño de teclado incorrecto en Ubuntu

¿Llamar a notificar-enviar desde una regla de Udev?

Linux:cambie la distribución del teclado sobre la marcha

¿Cómo cambiar la distribución del teclado en i3?

Regla Udev para hacer coincidir el dispositivo USB de múltiples nodos