A menudo conecto un teclado USB a mi computadora portátil (además del monitor externo y el mouse, que prácticamente convierten mi computadora portátil en una computadora de escritorio) y prefiero usar una distribución de teclado diferente.
Tengo que cambiar manualmente la distribución actual del teclado cada vez que conecto este teclado USB.
Y me gustaría utilizar una forma automatizada para esto, si es posible.
La respuesta de Radu a la pregunta aquí da algunas pistas, pero parece que necesitaré un script de inicio para esta tarea, ya que la identificación del dispositivo para mi teclado USB cambia cada vez que se inicia la computadora.
Este script de inicio probablemente incluirá primero el comando xinput -list | grep "USB Keyboard"
, y otro comando para tomar el primer número de identificación del teclado USB que se muestra y luego usarlo en el comando final para configurar mi diseño elegido para ese teclado USB de la siguiente manera:
setxkbmap -device <NUMBER> -layout <LAYOUT>
fuente
Respuestas:
Después de un poco de investigación, he encontrado una solución, aunque todavía estoy abierto a otras respuestas (probablemente mejores).
He aquí un script de inicio (que se puede añadir a aplicaciones de inicio ) que establecerá el introducida maually usbkbd_layout variable al usbkbd dispositivo de Identificación encontrado s en el -lista xinput :
Este script es bastante útil (y más estable) para escenarios en los que el usuario comienza a usar la computadora portátil en una configuración de escritorio (con teclado, mouse y monitor externos, etc.), y también se puede ejecutar manualmente cada vez que se conecta el teclado USB externo ...
================================================== ========================
LA MEJOR SOLUCIÓN (casi perfecta): encontrada gracias a MinimusHeximus y los respectivos contribuyentes al hilo que mencionó en su comentario a continuación:
¡Ahora solo puedo conectar mi teclado USB y aplicar automáticamente su diseño de teclado diferente (TR-F) mientras sigo manteniendo el diseño de teclado predeterminado (TR-Q) en mi computadora portátil!
Aquí están los archivos y sus contenidos que lo hacen posible:
/etc/udev/rules.d/00-usb-keyboard.rules
/home/sadi/.bin/usb-keyboard-in_udev
/home/sadi/.bin/usb-keyboard-in
/home/sadi/.bin/usb-keyboard-out_udev
/home/sadi/.bin/usb-keyboard-out
Notas:
chmod - 755 /home/sadi/.bin/usb-keyboard-*
PARA ADAPTAR ESTA CONFIGURACIÓN A DIFERENTES REQUISITOS:
lsusb
(por ejemplo, milsusb
salida tiene esto para mi teclado USB:Bus 001 Device 006: ID 09da:0260 A4 Tech Co., Ltd
)xinput -list | grep "USB Keyboard"
me da dos líneas;↳ USB Keyboard id=14 [slave keyboard (3)]
y↳ USB Keyboard id=16 [slave keyboard (3)]
; que luego se filtranawk
usando "=" como delimitador de campo y capturando la segunda parte; luego cortando solo la primeros dos dígitos, y luego usando solo el valor en la primera línea)fuente
IF
que tenía que usar unaFOR
. Me funciona ahora, gracias! gist.github.com/zvictor/193b567c14b5b6a679feSe pueden especificar las opciones del controlador X11 dentro de la regla udev, no se necesitan scripts personalizados. Como ejemplo, aquí están los contenidos de mi /etc/udev/rules.d/99-usb-kbd.rules
Esta regla garantiza que un teclado USB en particular use un diseño estadounidense en Xorg (el teclado interno de mi computadora portátil es alemán, y este también es mi diseño principal). Puntos importantes:
idVendor
yidProduct
de su dispositivo usandolsusb
oevtest
/usr/share/X11/xkb/symbols
. Preste atención para especificar tanto un diseño válido como una variante válida./lib/udev/rules.d/64-xorg-xkb.rules
fuente
/var/log/Xorg.0.log
posibles problemas. También puede usarudevadm info
para verificar que la configuración se aplique correctamente.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
. Si también agrega una nota, trataré de marcar la suya como la respuesta (en lugar de ese camino torpe, largo y sinuoso ;-)/usr/share/X11/xkb/rules/evdev.lst
Acabo de mejorar esta solución para un teclado bépo Typematrix (versión francesa de dvorak excelente optimizado) y en un contexto de sistema amplio (supone que tiene acceso de root a la máquina). Solo necesita 3 archivos para funcionar. Puede consultar un archivo de registro en caso de que no se dé cuenta de lo que está fallando.
/etc/udev/96-usb-keyboard.rules
/etc/udev/bepo-typematrix-kbd.sh (absolutamente necesario para usar un script de fondo intermedio)
/ etc / udev / bepo-typematrix-kbd
fuente
Después de jugar mucho, esto es lo que tengo corriendo por ahora. Tal vez escriba un artículo completo y publique el código dentro de un repositorio, si eso fuera de interés.
Configure un nuevo conjunto de reglas para udev así:
Se supone que la regla llama a un script de shell cada vez que un dispositivo activa alguna acción con la combinación dada de proveedor e ID de producto.
Después de agregar el nuevo conjunto de reglas, reinicie el servicio udev:
Nota: No pude lograr resultados confiables al proporcionar reglas de coincidencia más específicas en ese archivo. Lo más significativo es que agregar una
ACTION
regla coincidente no funcionó. Por lo que puedo decir, el script se activó de todos modos. Al agregarACTION=="add"
, la secuencia de comandos aún se invocaría al quitar el dispositivo. Muy extraño y confuso.Sin embargo, la acción que activó la regla udev estará disponible para el script llamado como se muestra a continuación.
A continuación, el guión en sí. Bueno, no del todo. Tenga
wrapper
en cuenta el sufijo en el nombre del archivo. Esto indica que este no es el script real sino un contenedor que llama al script y lo ejecuta en segundo plano para que udev pueda finalizar su proceso.~/.bin/switch-kb-layout-wrapper.sh
:La variable
ACTION
contiene la acción udev que fue activada por el dispositivo. Produce valores comoadd
(se conectó el dispositivo) yremove
(se retiró el dispositivo). Los usaremos más adelante.~/.bin/switch-kb-layout.sh
:Reemplace mi nombre de usuario con el suyo al configurar la
HOME
variable ($(whoami)
no funcionará aquí, ya que no será invocado por su usuario sino porroot
).Para fines de prueba, agregué algunas líneas que registran ciertos eventos en un archivo en mi directorio de inicio para ver si todo funciona. Puede guardarlos con seguridad.
Finalmente, estos scripts deben tener permisos de ejecución. También puede ser importante tener en cuenta que estos scripts serán llamados por el
root
usuario, así que tenga cuidado con lo que hace allí.fuente
gsettings set org.gnome.settings-daemon.plugins.keyboard active false
no funciona según lo previsto, ya que la secuencia de comandos se ejecutaroot
. En mis pruebas, la línea no tuvo efecto en esa configuración.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
como usuario de una vez por todas, y luego usar este script sin losgsettings set
comandos ...Tuve un problema de permiso con el script ejecutado por udev. Resolví con sudo de la siguiente manera:
Establecer el mapa del teclado para cada dispositivo
fuente
También puede definirlo en un archivo de configuración de Xorg.
Se presenta en esta respuesta de intercambio de pila: /superuser//a/946575/437492
fuente
/etc/X11/xorg.conf.d/
(ese es el lugar para ir).