¿Por qué está deshabilitada la tecla de bloqueo de desplazamiento en Cinnamon / Linux / Xorg?

13

Recientemente compré un teclado retroiluminado que fue diseñado de tal manera que la tecla Scroll Lock se usó para alternar la luz de fondo. Rápidamente descubrí que Cinnamon no responde correctamente cuando se presiona la tecla de bloqueo de desplazamiento. Originalmente, pensé que la luz de fondo del teclado era DOA porque todo lo demás funcionaba de fábrica. Después de reiniciar, descubrí que antes de iniciar Xorg pude alternar con éxito la luz de fondo con la tecla de bloqueo de desplazamiento. Luego, una vez más, después de iniciar Xorg (y consecuentemente cinnamon_session), esta funcionalidad dejó de funcionar una vez más.

Para que la luz de fondo funcione después de iniciar Xorg, me vi obligado a emitir un: xset led named "Scroll Lock"para habilitar y deshabilitar esta funcionalidad.

Después de un poco de investigación, me encontré con un programa llamado xevque arrojó información clave del evento al terminal después de que se inició. Al presionar la tecla de bloqueo de desplazamiento, el terminal se rellenó con esta información:

Evento KeyPress, serial 34, NO sintético, ventana 0x2c00001, raíz 0x2df, subw 0x0, hora 2609824, (410,0), raíz: (1724,142), estado 0x0, código clave 78 (keysym 0xff14, Scroll_Lock), misma pantalla SI, XLookupString da 0 bytes: XmbLookupString da 0 bytes: XFilterEvent devuelve: False

Evento KeyRelease, serie 37, NO sintético, ventana 0x2c00001, raíz 0x2df, subw 0x0, hora 2609912, (410,0), raíz: (1724,142), estado 0x0, código clave 78 (keysym 0xff14, Scroll_Lock), misma pantalla SI, XLookupString da 0 bytes:

Entonces sé que el evento clave se está enviando al kernel.

Además, curiosamente, observé un comportamiento extraño cuando estaba en la terminal (aún antes de lanzar Xorg o Cinnamon) y usaba Scroll Lock. Es decir, en este punto mi luz de fondo estaba cambiando como se esperaba, pero cuando se activó Scroll Lock, nada de lo que escribí se escribió en la pantalla. Después de deshabilitar Scroll Lock, todo lo que había escrito se volcó inmediatamente a la terminal como si estuviera siendo almacenado previamente.

tl; dr ¿Cuál es el trato con Scroll Lock y Xorg?

sherrellbc
fuente
¿Tuviste suerte resolviendo este problema @sherrellbc?
Pykler

Respuestas:

10

No estoy familiarizado con Cinnamon, pero debería ser posible habilitar su tecla de bloqueo de desplazamiento.

Primero, necesitamos ver si tienes una ranura de modificación de teclado de repuesto. Correr:

xmodmap -pm

Eso imprimirá una lista de su configuración de modificador actual. Con suerte, una de esas líneas no tendrá ninguna clave listada; en general eso será mod3. Suponiendo que ese sea el caso, puede habilitar Scroll Lock con este comando:

xmodmap -e "add mod3 = Scroll_Lock"

Su LED de bloqueo de desplazamiento ahora debería responder a las pulsaciones de teclas de bloqueo de desplazamiento.

Si eso funciona, probablemente quieras que X lo haga automáticamente cada vez que comience. Hay varias formas de hacerlo: se puede hacer por usuario, pero para algo como esto, creo que tiene sentido que se establezca a nivel mundial.

Pero nunca antes había hecho esto, así que será mejor que lo pruebe antes de dar más detalles. :)

OKAY. El método que intenté activar ese modmap globalmente no funciona para mí en KDE. :( Pero activarlo en mi directorio de inicio parece funcionar bien.

Cree un archivo llamado .Xmodmapen su directorio de inicio que contenga esta línea:

add mod3 = Scroll_Lock

La forma más fácil de hacerlo es:

cd ~
echo >.Xmodmap "add mod3 = Scroll_Lock"

Ahora reinicie X (cerrar sesión y volver a iniciar sesión). Con suerte, su tecla de bloqueo de desplazamiento estará funcionando. Si no es así, hágamelo saber.

PM 2Ring
fuente
La configuración de .Xmodmap no funcionó para mí en Ubuntu 16.04 / Unity, pero la solución permanente en la respuesta de Pykler funcionó :)
Nebel54
7

Encontré el camino permanente después de una larga noche con muchas soluciones medio horneadas.

# backup your symbols file
sudo cp /usr/share/X11/xkb/symbols/us{,.distribution} 

Agregue la siguiente línea en la xkb_symbols "basic" {sección. no se preocupe si esa segunda línea no está allí, solo está ahí para algunos idiomas y no estaba allí para nosotros en mi sistema.

...
    modifier_map Mod3   { Scroll_Lock }; <==<< Add this line

    include "level3(ralt_switch)" <==<< before this line
};

Es posible que tenga que hacer lo mismo en sus otros diseños si cambia de idioma

Además, hay un caché donde viven los diseños xkb. Debe borrarlo antes de reiniciar su servidor X para verificar los nuevos archivos de símbolos de teclado.

sudo rm -f /var/lib/xkb/*
Pykler
fuente
Esto es bueno, pero solo funcionó junto con gsettings change y xkboptions change mencionados en askubuntu.com/a/1067921/274298 para mí.
peschü
2

Como Scroll Lockpuede interferir con los atajos de teclado cuando está activo (nombrado F12, Ctrl+ Spaceno funcionará como se esperaba), decidí hacer coincidir la Scroll Locktecla con un inicio manual xset, alternando el estado del LED con respecto al estado anterior.

Creé un script ejecutable llamado toggle_keyb_led.sh:

xset q | awk '/LED/{ if ($10 ~ "00000000") print "led"; else print "-led" }' | xargs xset

Esto analiza la salida de xset q, haciendo coincidir la línea con LED mask.

Nota 1 : Si no funciona para usted, verifique xset -led; xset q | grep 'LED'cuál es el valor de máscara actual.

Nota 2 : Algunos usuarios necesitan correr xset led 3para activar la luz. En este caso, reescriba la secuencia de comandos anterior.


Luego puede iniciar este script como acceso directo personalizado utilizando su entorno de escritorio como (aquí está con una canela):

ingrese la descripción de la imagen aquí

sequielo
fuente