Luché con esto durante el fin de semana y necesito reasignar los botones de mi mouse.
Luché con esto durante el fin de semana y necesito reasignar los botones de mi mouse.
Respuestas:
Tengo un mouse Logitech con 9 botones, y presionar el "botón central" (# 2) implica hacer clic en la rueda de desplazamiento. No me gusta esto porque soy torpe y generalmente termino desplazándome por la ventana en la que estoy cuando trato de hacer clic en la rueda. Así que quería reasignar automáticamente el botón lateral superior (# 9 en este caso) al botón central (# 2). También quería asignar el botón lateral inferior (# 8) para que ejecute un doble clic en el botón izquierdo (# 1).
Aunque mis objetivos eran específicos, las soluciones a continuación se pueden generalizar a cualquier situación en la que desee reasignar automáticamente los botones del mouse al inicio.
Deberá xinput
instalarlo para esta tarea. Esto se puede hacer completamente en su .xsessionrc
archivo. Primero, use xinput
para descubrir el nombre asignado a su mouse, que luego se correlaciona con una ID de dispositivo de entrada. A continuación se muestra un ejemplo de salida de mi computadora portátil:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Laser Mouse id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
Mi mouse se llama a sí mismo Logitech USB Laser Mouse
y se muestra como id=11
. Su mouse tendrá un nombre diferente; darse cuenta de eso queda como un ejercicio para el lector.
Si bien aún conoce la identificación del dispositivo en esta sesión, descubra cuántos botones cree que tiene el controlador de entrada con el mouse . Esto puede ser diferente de la cantidad de botones que es evidente en el dispositivo.xinput list
deviceID
Logitech USB Laser Mouse id=11 [slave pointer (2)]
Reporting 7 classes:
Class originated from: 11. Type: XIButtonClass
Buttons supported: 16
Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" "Button Task" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown"
Con mi mouse, solo hay 9 botones físicos obvios, pero xinput
informa 16.
Dada la naturaleza del USB, esta ID puede cambiar cada vez que reinicia, por lo que no es suficiente escribir algo que esté estáticamente codificado en una ID que descubra una vez. Tendrá que analizar esto dinámicamente al inicio y ejecutar su nueva asignación en función de la ID actual.
Ahora que conoce su nombre, puede usar xinput test
para averiguar qué tecla reasignar. Presione los botones del mouse desde los que desea asignar y para obtener sus índices. (Para referencia, 1, 2 y 3 "siempre" (es decir, generalmente) se refieren a los botones izquierdo, medio y derecho de un mouse de 3 botones. Un cambio de mapa común los invierte para hacer que el mouse sea zurdo. )
button press 2
button release 2
button press 9
button release 9
En este caso, descubrí que quiero asignar el botón n. ° 9 (lateral, superior) al botón n. ° 2 (centro).
Ahora que sabe cómo se llama su mouse y qué botones desea cambiar, puede escribir un ~/.xsessionrc
script que invoque xinput
para ejecutar la reasignación de botones al inicio. A continuación se muestra mi guión completo.
# Map button 9 (top side button) to button 2 (middle button)
my_mouse_id=$(xinput | grep "Logitech USB Laser Mouse" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
La primera línea aquí establece una variable de sesión temporal igual a la ID del mouse según lo informado por xinput
. Esto se hace usando grep
el nombre conocido del mouse en el informe xinput
y luego sed
extrayendo el número de identificación de ese id=xxx
token en el informe. Este valor luego se usa en una xinput set-button-map
directiva, que ejecuta la reasignación. En el ejemplo anterior, el único cambio es que el botón n. ° 9 se está reasignando para imitar el botón n. ° 2. Todos los demás permanecen en su configuración predeterminada.
Actualización: como señala @Lokasenna a continuación , si su dispositivo se presenta como un mouse y un teclado, es posible que deba limitar el recuento de resultados del grep
uso -m 1
.
Ver también esta respuesta .
Necesitará xinput
, xbindkeys
y xautomation
(incluido xte
) instalado para esta tarea.
Use xinput list
y xinput test
para descubrir la identificación del dispositivo de su mouse y el número del botón que desea asignar. En mi caso, quería asignar el botón lateral inferior (# 8) a un doble clic en el botón izquierdo (# 1).
Crea o edita ~/.xbindkeysrc
. El formato de este archivo es una serie de líneas emparejadas. La primera línea es un comando que se ejecutará para un evento; La segunda línea es la descripción del evento. Utilizaremos el xte
componente de xautomation
para enviar eventos directamente al controlador de entrada.
Para crear un evento de doble clic cuando se suelta un botón, agregué lo siguiente:
"/usr/bin/xte 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
Esta configuración asigna una secuencia de dos clics del mouse en el botón n. ° 1 a la liberación del botón n. ° 8. (En teoría, supongo que podría asignar cualquier comando a un botón del mouse, pero este es el caso más común. Consulte esta respuesta para ver otros ejemplos prácticos).
Para los usuarios con varios ratones conectados a su sistema, también debe pasar la identificación del dispositivo. Esto puede no aplicarse a todos los usuarios y fue descubierto en Ubuntu 16.04 con Unity.
xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Kensington Kensington Expert Mouse id=9 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=14 [slave pointer (2)]
Luego modifique el archivo .xbindkeysrc haciendo referencia al valor id = del resultado del comando (id = 9 en este ejemplo):
"/usr/bin/xte -i 9 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
awk
declaración con su sed
declaración en mis ejemplos. Gracias por la mejora!
xinput set-button-map "Logitech Trackball" 1 3 3
xinput
muestra mi mouse dos veces, de esta manera: ↳ USB OPTICAL MOUSE id = 12 [puntero esclavo (2)] ↳ USB OPTICAL MOUSE id = 13 [puntero esclavo (2)] Solo ID 13 capturará comandos con xinput test
. El script siempre capturará la primera ID. ¿Pero por qué es dos veces de todos modos? Ambos desaparecen cuando desconecto este mouse y reaparecen cuando estoy conectado.
Los pasos cortos para esto son:
Hay una utilidad llamada xinput
. xinput list
o simplemente xinput
mostrará todos los dispositivos de entrada X y sus ID. Aquí encontrará la identificación del mouse que desea reasignar.
Usaré mi ID como ejemplo, desde mi configuración, que es 21, luego xinput --get-button-map 21
generaré
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Ahora, si quiere, por ejemplo, intercambiar los botones izquierdo y derecho, simplemente ejecute
xinput --set-button-map 21 3 2 1
Aquí estamos, la reasignación está hecha.
Para ejecutarlo al inicio, simplemente ponga esto en un archivo:
echo "xinput --set-button-map 21 3 2 1" > leftmouseremap.sh
darle permiso ejecutable
chmod +x leftmouseremap.sh
Finalmente, agregue esto a la aplicación Statrtup manualmente desde la GUI o, si lo desea desde la CLI, coloque el texto a continuación (cambie las rutas a la suya) en un archivo en su ~/.config/autostart
, aquí está el mío ( less .config/autostart/leftmouseremap.sh.desktop
):
[Desktop Entry]
Type=Application
Exec=/home/ruslan/leftmouseremap.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=/home/ruslan/leftmouseremap.sh
Name=/home/ruslan/leftmouseremap.sh
Comment[en_US]=
Comment=
Tenga en cuenta que con KDE la ruta sería similar ~/.kde/Autosart
, para otros administradores de escritorio esto podría ser muy diferente. Alternativamente, la ejecución de inicio se puede hacer con un enfoque general mediante el uso /etc/rc.local
.
Cuando se utiliza la excelente respuesta de zerobandwidth , algunos dispositivos, como MX Ergo de Logitech, aparecen como dispositivos de puntero y teclado :
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech MX Ergo id=10 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
...
↳ Logitech MX Ergo id=15 [slave keyboard (3)]
En consecuencia, grep "Logitech MX Ergo"
termina devolviendo dos valores. Este último termina siendo incluido como el primer elemento en la cadena de mapeo y arruina todos los botones del mouse.
La solución es fácil: solo use grep
el argumento de conteo máximo -m 1
:
my_mouse_id=$(xinput | grep -m 1 "Logitech MX Ergo" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput --set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
Pude cambiar el mapeo del botón central de mi mouse Logitech a 'Volver' usando Easystroke Gesture Recognition, que descargué del Centro de software de Ubuntu. Editar: en la aplicación, debe seleccionar Agregar acción, asignarle un nombre, seleccionar el tipo de clave, hacer clic en Detalles y presionar Entrar, presionar Grabar trazo y, durante la solicitud, presionar el botón central.
xinput
con botones que no aparecen cuando se usa xinput list <devID>
.
Antes del 12.04, había una herramienta gráfica fácil llamada "btnx" en el repositorio estándar, que se agregaba como "Propiedades del botón" en la Configuración del sistema. Lamentablemente, sin embargo, se dejó caer. Aquí se encuentra un PPA "no confiable" para 14.04, 16.04 y 18.04: https://launchpad.net/~oliverstar/+archive/ubuntu/ppa (que se encuentra en https://launchpad.net/ubuntu/xenial/+source / btnx )
No se integrará con la configuración del sistema, pero funciona bastante bien en mi computadora portátil con un mouse barato de 5 botones. ¡También puede reasignarse a teclas y comandos y la configuración es mucho más simple que con cualquier otro método!
Tengo HP elitebook 2570p, Ubuntu 18.04.2. Aquí tengo un trackpoint que es inútil para mí y aquí hay 2 botones de trackpoint inútiles debajo del espacio
No uso estas teclas porque las tengo debajo del panel táctil. Me gustaría reasignar estos botones a left = back_button (Alt_L + Left), the right one = middle_mouse_button. El trackpoint en "xinput" es id = 11 y el botón izquierdo es el número 1, el derecho es el 3.
¿Podría alguien escribirme el código correcto para copiarlo en la terminal? Me he combinado con xbindkeysrc pero eso establece cualquier acción en ambos botones (trackpoint y touchpad)
sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/'