El método abreviado de teclado "Siempre visible" de GNOME 3 no se desactiva

El método abreviado de teclado "Siempre visible" de GNOME 3 no se desactiva

Esto no es un gran problema, pero sí un poco molesto y, sobre todo, intrigante. Ejecuto una máquina estable Debian 9 con Xfce 4.12 por un tiempo y estoy configurando un escritorio GNOME en paralelo para probarlo.

En Xfce tengo un atajo de teclado personalizado wmctrl -r :ACTIVE: -b toggle,aboveque ha estado funcionando desde siempre alternando ventanas enfocadas en la parte superior y al mismo nivel que otras.

Probé el mismo en GNOME 3.22 en Configuración del sistema/Teclado, solo puedo alternar la ventana enfocada encima de otras, no la vuelve a alternar al mismo nivel que otras ventanas. Tengo que hacer clic derecho en el marco de la ventana y desmarcar la opción "Siempre visible".

¿Alguien tiene alguna idea de por qué podría suceder esto?

Respuesta1

También noté esto en abril de 2016, mi solución es usar 2 teclas para alternar, por ejemplo:

wmctrl  -r :ACTIVE: -b add,above
wmctrl  -r :ACTIVE: -b remove,above

Respuesta2

Bueno, después de mucha investigación y de descubrir cómo escribir código adecuado en bash, he creado un comando único que usa los comandos wmctrl dentro de una capa de lógica para alternar el estado "siempre visible" de manera efectiva en el escritorio GNOME actual. Mirad:

bash -c 'wmctrl -r :ACTIVE: -b $([[ $(xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") _NET_WM_STATE) =~ "ABOVE" ]] && echo "remove" || echo "add"),above'

Comprueba la propiedad de estado de la ventana activa "_NET_WM_STATE" usando xprops, y si contiene el texto "ARRIBA", significa que la opción "siempre visible" está activa. Luego simplemente ejecuta el wmctrlcomando con el parámetro addo removesegún corresponda.


Desglose de comandos (cada comando se inserta en el siguiente, reemplazando el marcador de posición):

  • Obtener ID de ventana activa:

    xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}"

  • Obtenga el estado de la ventana de xprop usando la identificación:

    xprop -id $(■) _NET_WM_STATE

  • Compruebe si el estado contiene 'ARRIBA', lo que indica que la ventana está configurada como 'siempre visible':

    [[ $(■) =~ "ABOVE" ]]

  • Devuelve "eliminar" si es verdadero; en caso contrario, devuelve "agregar":

    ■ && echo "remove" || echo "add"

  • ejecute el comando wmctrl usando el valor devuelto como parámetro

    wmctrl -r :ACTIVE: -b $(■),above

  • Envíe todo a bashpara que pueda usar la sustitución de comandos ${ ... }, la evaluación booleana de bash [[ ... ]]y el operador de coincidencia de expresiones regulares=~

    bash -c '■'

    Este último paso en particular me llevó mucho tiempo darme cuenta. Hasta que me di cuenta de que los atajos de teclado no se ejecutaban en bash de forma predeterminada, no tenía idea de por qué los comandos funcionaban en la consola mientras los probaba, pero fallaban silenciosamente cuando se ejecutaban directamente como un atajo de teclado. ¡Me puso contra la pared durante años!

Nota: debido a que necesitas comillas alrededor del comando que estás enviando a bash, tuve que tener cuidado al escribir el comando y nunca profundicé más de un nivel más (usando comillas dobles). Cualquier anidamiento adicional de cadenas entre comillas habría requerido muchas barras invertidas confusas para escapar de las comillas.

información relacionada