¿Puedo reasignar la tecla Bloq Mayús para reproducir audio?

16

Estoy tratando de reutilizar la tecla de bloqueo de mayúsculas inútil para algo útil en 16.04 MATE. He encontrado

setxkbmap -option ctrl:nocaps

para deshabilitarlo, pero ¿podría reasignarse para reproducir / pausar VLC, por ejemplo? ¡Gracias por tus respuestas!

2BFrank
fuente
No creo que esto funcione ... por varias razones ... por ejemplo, creo que Linux trata el bloqueo de mayúsculas como un modificador y no como una clave separada. Esa probablemente sea la razón por la que no puede vincularlo en VLC. Además, si lo desactiva, está desactivado. Pero puedes jugar en la línea de comandos e intentar vincularlo vlc --key-play-pause <key-string>, pero no he encontrado una cadena que VLC acepte como mayúsculas ...
Robert Riedl
1
Instalé dconf-editorprobé un par de cosas, instalé xdotoolintenté un par de cosas y finalmente xbindkeyse intenté un par de cosas. Al final de este ejercicio infructuoso, mi botón de pausa / reproducción del teclado estaba roto Y mi propio botón de reproducción / pausa de pantalla estaba atenuado y la música no se reproducía. Hice esto en 16.04, así que reinicié en 18.04 para confirmar que todo sigue funcionando y fueron los piratas informáticos los que lo hicieron. La única gracia salvadora es que solo reproduzco música a través del teléfono Android y no de la PC. Solo un aviso para que otros tengan cuidado y documenten lo que haces en tu máquina mejor que yo.
WinEunuuchs2Unix
1
@pbhj Gracias por el consejo. De alguna manera logré que play / pause volviera a funcionar con el botón en pantalla y el botón de pausa / reproducción del teclado en Ubuntu 16.04. Solo quería advertir a las personas sobre posibles dificultades para experimentar con estas utilidades de teclado de bajo nivel.
WinEunuuchs2Unix
1
2BFrank: asegúrese de aceptar una de las respuestas si resuelve su problema. Dado que hay una recompensa por esta pregunta, dejar una respuesta no aceptada (y no otorgar manualmente la recompensa) solo otorgará la mitad de la recompensa a @Sebastian Stark, ya que su respuesta es la más votada.
Nonny Moose
1
@NonnyMoose Gracias por ese comentario. Iba a dejarlo para enviarlo automáticamente a la respuesta aceptada o al total de votos más alto, pero no sabía que reducía a la mitad el premio, por lo que lo otorgaré manualmente al total de votos más alto en aproximadamente dos horas si No se acepta respuesta.
Chai T. Rex

Respuestas:

11

evtest y dbus

Aquí hay una versión que involucra un pequeño script que se ejecuta en segundo plano. Se deben seguir algunos pasos sencillos:

  • Instalar el evtest programa: sudo apt install evtest. Este programa puede decodificar e imprimir eventos sin procesar desde la /dev/input/jerarquía de dispositivos.

  • Agregue su cuenta de usuario al grupo input. Cerrar sesión e iniciar sesión nuevamente. (Esto es necesario porque vamos a leer desde algún dispositivo debajo /dev/input/, lo que normalmente solo puede hacer la raíz o los usuarios en grupo input. Podríamos ejecutar el script como root, pero luego tendríamos que encontrar una manera de decirle qué usuario instancia de dbus con la que necesita hablar).

  • Deshabilite la tecla de bloqueo de mayúsculas como lo hizo o use la preferencia de Mate correspondiente. También funcionaría si asigna la tecla de bloqueo de mayúsculas a Ctrl, como hacen muchas personas.

  • Almacene el siguiente script en algún lugar, por ejemplo, $HOME/bin/capshacky hágalo ejecutable:

    #!/bin/bash
    
    KEYBOARD=/dev/input/by-path/platform-i8042-serio-0-event-kbd
    EVENT="type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1"
    
    toggleVLC () {
            dbus-send \
                --type=method_call \
                --dest=org.mpris.MediaPlayer2.vlc \
                /org/mpris/MediaPlayer2 \
                org.mpris.MediaPlayer2.Player.PlayPause
    }
    
    evtest "$KEYBOARD" | \
    while read line
    do
        if [[ "$line" == *"$EVENT" ]]
        then
            toggleVLC
        fi
    done
    

El script anterior escuchará los eventos del teclado y ejecutará un comando cuando se presione la tecla de mayúsculas. El comando que se ejecuta utiliza dbus para enviar un evento de reproducción / pausa a una instancia de VLC en ejecución. Puede que tenga que ajustar la KEYBOARDvariable para que apunte a su teclado real, pero es probable que el valor anterior funcione.

Si prefiere que se llame a la función toggleVLC () cuando suelta la tecla de bloqueo de mayúsculas, puede cambiar la EVENTvariable en el script de modo que termine en value 0lugar de value 1.

Además, es posible que para usted el código clave de la tecla de mayúsculas sea diferente de 58. Puede verificar esto al ejecutar evtest, mirar la salida cuando presiona mayúsculas y ajustar la variable EVENT en consecuencia. Ni siquiera tiene que hacer coincidir el código clave y establecer EVENT simplemente en (KEY_CAPSLOCK), value 1.

En lugar de usar evtest y el script anterior, podría usar thd desde el paquete triggerhappy (algo así thd --dump /dev/input/*daría una salida similar), pero encontré que es un poco menos educativo.

Ahora creamos una unidad systemd de usuario para iniciar el script automáticamente en segundo plano:

  • Cree la jerarquía systemd de usuario: mkdir -p $HOME/.config/systemd/user

  • Agregue el siguiente texto al archivo $HOME/.config/systemd/user/capshack.service

    [Unit]
    Description=Abuse capslock key
    
    [Service]
    ExecStart=%h/bin/capshack
    
    [Install]
    WantedBy=default.target
    
  • Habilite la unidad de servicio que acaba de hacer: systemctl --user enable capshack

  • Comience el servicio: systemctl --user start capshack

A partir de ahora, debería poder alternar reproducción / pausa en VLC con la tecla de bloqueo de mayúsculas. El script de fondo debe iniciarse automáticamente cuando inicie sesión.

gatillo fácil

Como ya se mencionó, también puede usar el paquete triggerhappy para hacer esto. Este es el método preferido para las personas que quieren jugar menos con el sistema y prefieren una solución más sólida.

  • Agregar usuario al inputgrupo como arriba

  • Instala el paquete: sudo apt install triggerhappy

  • Agregue una configuración para triggerhappy para ~/.config/thd/capslock.conf:

    KEY_CAPSLOCK    1   dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
    
  • Ejecute thd así: thd --triggers ~/.config/thd/capslock.conf /dev/input/event*

  • Haga que thd se ejecute para su usuario de una manera similar a la descrita para capshack.

  • Asegúrese de tener solo uno de los métodos mencionados (capshack o thd) en ejecución, para no alternar dos veces cada pulsación de tecla.

Probé todo esto en 18.04 bajo la sesión estándar y 16.04 compañero. Pero, en teoría, también debería funcionar en wayland o con otros entornos de escritorio.

Sebastian Stark
fuente
@ WinEunuuchs2Unix gracias por mencionar. Personalmente prefiero el estilo más detallado de la cláusula completa if / then / else: es más explícito, es más fácil de extender y no tiende a hacer líneas demasiado largas. Aunque en este caso realmente no importaría mucho.
Sebastian Stark
Estoy de acuerdo con las líneas demasiado largas. Recientemente adapté el estilo de codificación a dos líneas con la primera línea [[ test ]] && \ y la segunda línea con sangría en cuatro espacios <command>para ejecutar una prueba positiva. Estoy totalmente de acuerdo con la legibilidad porque mi recomendación es ajena a la mayoría de los lenguajes de programación.
WinEunuuchs2Unix
esto es genial ! Aunque creo que parece triggerhappyser el camino a seguir, ya evtestque en realidad es un programa de depuración :)
Robert Riedl
sí, prueba para aprender, para hacer :)
Sebastian Stark
... Para mí, de todos modos, el código clave 58 es m, por lo que el script no funciona. Recomiendo verificar xmodmap -pke | grep Caps_Lockantes de usar este script para asegurarse de que el código clave sea correcto.
Nonny Moose
9

En Ubuntu 16.04 después de pasar horas buscando en Google y jugando dconf-editory xbindkeysencontré una solución extremadamente fácil:

  • Configuración muy rápida en 2 minutos.
  • Solo se necesita instalar xdotool
  • No se necesitan guiones
  • El bloqueo de mayúsculas todavía se reconoce pero no alterna mayúsculas y minúsculas
  • Funciona con la configuración de acceso directo personalizada del teclado Ubuntu estándar

Si necesita el XF86AudioPlaysoporte de Gnome que necesita xdotool(no es necesario para VLC como estipula OP):

sudo apt install xdotool

Ahora aquí está la parte difícil. Cada vez que presiona la Caps LocKtecla para alternar la música entre Reproducir y Pausa, las letras mayúsculas también se activan y desactivan.

Use este método para desactivar la alternancia de Bloq Mayús mientras mantiene la tecla activa:

setxkbmap -option caps:none

Reproductores de música que se adhieren a Gnome

Luego, en Ubuntu 16.04, vaya a Configuración >> Teclado >> Accesos directos >> Accesos directos personalizados :

audio pause-play shortcut.png

  • Establecer el nombre aAudio Play
  • Establezca el comando enxdotool key XF86AudioPlay
  • Luego haz clic en el Applybotón

Después de agregar la nueva opción, la tecla de acceso directo asignada leerá Desactivado . Haga clic en Desactivado y cuando se le solicite la tecla para asignar, presione la Caps LocKtecla.


Reproductores de música como VLC

Siga los pasos para Gnome en la sección anterior, pero para el comando use esto en su lugar:

qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

VLC no reconocerá las teclas multimedia: ¿cómo hacer que las teclas multimedia del teclado funcionen con VLC a nivel mundial? incluso cuando está integrado en el teclado. Por lo tanto, el atajo de teclado personalizado para XF86 AudioPlay es inútil xdotool.


Establecer atajos de teclado personalizados desde la línea de comando

Este Q&A discute cómo configurar atajos de teclado personalizados desde la línea de comando: ¿Cómo configurar atajos de teclado personalizados desde la terminal?


Desactivar el bloqueo de mayúsculas permanentemente

El siguiente paso es hacer que esto sea setxkbmap -option caps:nonepersistente en todos los reinicios. Google busca resultados en esta respuesta de Terdon: Guardar la configuración de setxkbdmap :

Una manera fácil sería agregar el comando a su $HOME/.profilearchivo (puede crearlo si no existe):

setxkbmap -option caps:none

Eso debería hacer que se ejecute cada vez que inicie sesión.

Tenga en cuenta que debe usar en $HOME/.profilelugar de $HOME/.bash_profile, $HOME/.bashrco algún otro archivo similar. Esto se debe a que su administrador de inicio de sesión debe leer esta configuración.

WinEunuuchs2Unix
fuente
Simple, elegante, hace el trabajo: ¡ La respuesta perfecta para mí!
Fabby
@Fabby Bueno, debo admitir que es fácil de configurar y probar, y no requiere de muck de bajo nivel o de ejecutar scripts constantemente. Pasé por cuatro intentos diferentes antes de tropezar con este método. Todavía no lo llamaría perfecto pero ¡GRACIAS! . Si me dejan volver a Europa, te compraré una pinta.
WinEunuuchs2Unix
¿Funciona con Wayland?
danzel
@dabzel Me temo que Wayland no funciona setxkbmap -option caps:none. El programa de utilidad está instalado, sin embargo, Wayland sigue alternando entre mayúsculas y minúsculas. Podría publicar una pregunta por separado sobre cómo lograr que Wayland respete setxkbmap.
WinEunuuchs2Unix
3

Esta respuesta se ha probado en Ubuntu MATE 16.04.4 LTS en una máquina virtual (pero el teclado era un teclado USB en paso, por lo que eso no debería hacer la diferencia). Tampoco requiere software adicional, y se puede hacer en una instalación de vainilla sin instalar ningún paquete, y es persistente entre las botas.

Remapear Bloqueo de mayúsculas

  1. Edite el archivo /usr/share/X11/xkb/symbols/pccomo root. Tenga cuidado de no cometer un error aquí (como olvidar la coma) porque es posible que ya no pueda usar su teclado si lo hace. (¿Adivina lo que aprendí de la manera difícil?)

  2. Comenta la línea

        key <CAPS> {    [ Caps_Lock     ]   };
    

    colocando dos barras diagonales ( //) al comienzo de la misma.

  3. Agregue debajo la siguiente línea:

        key <CAPS> {    [ XF86AudioPlay, XF86AudioPause ]   };
    
  4. Comenta la línea

        modifier_map Lock   { Caps_Lock };
    

    de la misma manera que arriba.

  5. Reiniciar.

Nota: (crédito a danzel por señalar esto) Las actualizaciones del paquete xkb-datapueden sobrescribir este archivo. Un método razonablemente seguro para prevenir esto es desviar el camino usando dpkg-divert. (Digo "razonablemente seguro" porque la fuente ascendente de este archivo no se ha modificado en tres años).

Método alternativo

Deshabilite manualmente la tecla Bloq Mayús en la configuración de diseño del teclado, luego use el enfoque en esta respuesta para agregar sus propias asignaciones de teclas.

¿Problemas?

Su tecla de bloqueo de mayúsculas ya no bloquea mayúsculas, y se ha reasignado a Reproducir / Pausa en este punto. Ahora debería poder reproducir y pausar música en VLC. Si funciona en este punto, puede omitir el resto de estas instrucciones.

Sin embargo, cuando lo probé, VLC no respondió a la tecla Reproducir / Pausa.

Asegúrese de que el método abreviado de teclado esté configurado correctamente

  1. Abrir atajos de teclado (Sistema → Preferencias → Hardware → Atajos de teclado)

  2. Asegúrese de que "Reproducir (o Reproducir / Pausa)" esté configurado en "XF86AudioPlay"

  3. Si no es así, haga clic en la sección "Acceso directo" y presione su nueva tecla Reproducir / Pausa para configurar el acceso directo. captura de pantalla útil

  4. Si aún así no funciona, reinicie un par de veces por si acaso. (Eso es lo que realmente me arregló).

Nonny Moose
fuente
Esto puede interferir con las xkbopciones, especialmente caps:...las. Además, podría ser sobrescrito por las actualizaciones del sistema.
danzel
De hecho, podría. Sin embargo, un buen punto sobre las actualizaciones del sistema. Agregaré una nota sobre esto en mi respuesta. ¡Gracias por la respuesta!
Nonny Moose
Queridos todos, ¡guau! Lo siento, estuve afk por un tiempo :-) y ahora estoy descubriendo todo el esfuerzo que pusieron en la solución. Intentará @ WinEunuuchs2Unix respuesta y te mantendré informado ¡Gracias, LLAP!
2BFrank
@ 2BFrank Por curiosidad, ¿encontró una respuesta que funcionó?
Nonny Moose
1

Instalar xbindkeys, xcape y playerctl . Asegúrese de que xcape(se asigna CapsLocka una clave de repuesto como Alt+F12by xcape -e 'Caps_Lock=Alt_L|F12) y playerctlse inician automáticamente al iniciar sesión, y agregue al archivo ~/.xbindkeysrclas dos líneas

"playerctl play-pause"
  Alt + F12
Enno
fuente
0

Convierta su tecla de mayúsculas en una tecla de reproducción / pausa

Esta solución reasignará el código de escaneo de su llave de mayúsculas a un código diferente en el controlador de entrada del núcleo, en este caso reproducir / pausar.

Ventajas

  • No es necesario modificar los archivos del sistema existentes (solo se debe crear un archivo nuevo)
  • Las aplicaciones no sabrán que en realidad es una tecla de bloqueo de mayúsculas, pero creo que se ha presionado una tecla de reproducción / pausa real
  • No es necesario desactivar el bloqueo de mayúsculas, no hay posibilidad de estropear la xkbconfiguración

Desventajas

  • Tiene que hacerse para cada teclado individualmente (lo que, dependiendo de la situación, también puede ser una ventaja)

Prerrequisitos

  • evtest (se puede instalar a través de sudo apt-get install evtest)

Procedimiento

En una terminal, ejecuta sudo evtesty selecciona tu teclado. Si no hay salida cuando presiona una tecla, presione Ctrl+ Ce intente con un dispositivo diferente. Recuerde el número de evento del dispositivo que seleccionó, lo necesitaremos después. Presione la tecla de bloqueo de mayúsculas. Aparecerán algunas líneas como las siguientes:

Event: time 1529406021.187148, -------------- SYN_REPORT ------------
Event: time 1529406021.218427, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1529406021.218427, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 0

Necesitamos el valor de la MSC_SCANlínea que precede a la KEY_CAPSLOCKlínea. En el ejemplo anterior, esto sería 70039, pero el código de escaneo en su teclado es probablemente diferente.

Ahora ejecute el siguiente comando, pero reemplace la X con el número de evento del dispositivo que utilizó para el evtestcomando:

grep "" /sys/class/input/eventX/device/id/*

... Esta es la salida bustype, product, vendory versiondel teclado.

Crear un archivo con el nombre 65-keyboard-custom.hwdbde /etc/udev/hwdb.d/(requiere permisos de root) con el siguiente contenido:

evdev:input:b[bustype]v[vendor]p[product]e[version]*
 KEYBOARD_KEY_[scancode]=playpause

...dónde

  • [bus], [proveedor], [producto] y [versión] tienen exactamente 4 caracteres y las letras deben estar en mayúsculas
  • [scancode] tiene que estar en minúsculas
  • el evdev:... línea no tiene espacio precedente
  • la KEYBOARD_KEY...linea tiene exactamente un espacio precedente

Por ejemplo:

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

Finalmente, compile la nueva configuración en la base de datos de hardware:

sudo systemd-hwdb update

Si desea aplicar los cambios de inmediato, informe a udev:

sudo udevadm trigger

Si desea revertir los cambios, simplemente elimine el archivo que creó y reinicie.

Puede encontrar información más detallada en mi respuesta original sobre este tema.

danzel
fuente
@Nonny Moose, es por eso que escribí "Debe hacerse para cada teclado individualmente". Además, puede especificar tantos teclados como desee, por lo que realmente solo tiene que hacer esto para cada nuevo teclado que compre. Por otro lado, puede omitir un teclado si lo desea, por ejemplo, porque ya tiene una tecla física de reproducción / pausa.
danzel
... Bueno, no estaba prestando atención. Estoy corregido.
Nonny Moose
0

Tal vez usando xbindkeyso XTEpodrías hacer eso. Pero primero asegúrese de cuáles son los códigos de teclas, puede ver el código de la tecla de bloqueo de mayúsculas usando el comando xeven el terminal y presionándolo (puede ver el código de tecla de cualquier keu o botón de mouse, incluidos los ratones de juego). Con el código clave de bloqueo de mayúsculas y botones de reproducción en la mano, puede editar el archivo confi de xbindkeys y colocar sus cambios. use touch ~/.xbindkeysrcpara crear el archivo de configuración (si el sistema no lo crea automáticamente) y nano ~/.xbindkeysrcpara editarlo. Lo he usado el mes pasado y aquí es un ejemplo. Eche un vistazo a estos enlaces que pueden ser muy útiles para usted.

https://help.ubuntu.com/community/MultimediaKeys

https://gist.github.com/jbonney/5743509

Reasignar un botón de mi mouse para juegos a una tecla del teclado

https://matmunn.me/post/binding-volume-control-mouse-buttons-ubuntu/

Edmilson Gonçalves
fuente