Xbindkeys no funcionará correctamente

8

Tengo un pequeño problema. Quería reasignar algunas teclas de acceso rápido a las que estoy acostumbrado desde mi sistema anterior, pero no puedo hacer que funcione correctamente xbindkeys.

xbindkeys reconoce la combinación pero de alguna manera el comando no se dispara.

Si uso el comando

xdotool key braceleft

Me da la {señal correcta en la consola. Sin embargo, si uso el mismo comando en xbindkeys, no pasa nada. Si reemplazo el comando con firefoxél funciona correctamente y abre Firefox, entonces supongo que xbindkeysfunciona.

Quiero lograr lo siguiente:

Quiero escribir el carácter {en la ventana activa con Alt_R+ 7o Alt_Left+ Ctrl+ 7para poder usar ambos. Sé que Alt_R(AltGr) es la forma correcta, pero en los teclados alemanes es de alguna manera difícil escribir el braceleft con la AltGrtecla (Alt_R), así que DEBO usar Alt_L+ Control+ en su 7lugar (como estaba acostumbrado en mi sistema anterior). De alguna manera conseguí que funcionara correctamente en 12.04, pero no puedo hacerlo funcionar en 14.04.

¿Alguna sugerencia? Intenté varios comandos. Todos trabajaron en la consola, pero ninguno funcionó cuando xbindkeys los ejecutó.

xdotool type '{'
xdotool key braceleft
xdotool key ISO_Level3_Shift+7
xvkbd -xsendevent -text '{'
xvkbd -xsendevent -text '\[Alt_R]+7'

Esta es mi configuración, que no funcionará

"xdotool key braceleft"
Control+Alt + 7

Sin embargo, esto funciona:

"firefox"
Control+Alt + 7

Editar solución

Cuando probé varias cosas más, noté que xdotool parece desencadenarse demasiado pronto. Modifiqué la configuración de esta manera:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7

AHORA envía el signo {correcto a la ventana activa. Ahora lo único que queda es reducir el sueño y la demora a un valor viable, porque 1 segundo parece demasiado largo :)

** Información adicional ** Bueno, ahora logré encontrar valores adecuados. SIN EMBARGO, esto solo funciona si sueltas las teclas hasta que la duración del sueño haya terminado. Si eres demasiado lento, no funcionará.

Esta es mi configuración actual para todos los caracteres alemanes AltGr poco convenientes

"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7

"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q

"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e

"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8

"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9

"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0

"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus

Sin embargo, si desea escribir múltiples signos @ (por ejemplo), debe presionar Ctrl + Alt + Q según lo previsto, pero suelte todas las teclas y luego vuelva a presionarlo. Esto, sin embargo, es mucho, mucho mejor que no tener la opción Control + Alt en lugar de AltGr, pero no es tan efectiva como yo también la usaba. Quizás encuentre una solución para esto también.

Ello
fuente
Eh, eso es un buen hallazgo! No hay límite de repeticiones para responder su propia pregunta, solo un límite de tiempo . Sería genial si pudieras regresar y publicar esto como respuesta en 6 horas. Eso también te dará algo de reputación si te importa eso. Si realmente no te importa, incluiré tu solución en mi respuesta en unos días.
terdon
¿Alguna vez descubriste cómo xdotoolrepetir la tecla mientras la mantienes presionada?
Farzher
Para ser honesto, no lo intenté por ahora. Logré que League of Legends funcione sin problemas con 60 fps (en 12.04 no comenzaría en absoluto) para que yo, cuando estoy en casa, estuviera jugando todo el tiempo.
Ello
No tuve algunos atajos trabajando durante días. La solución fue simple: mi escritorio de Ubuntu obtuvo los accesos directos antes que xbindkeys. Simplemente edite la configuración de kayboard, agregue un nuevo acceso directo personalizado con acciónxdotool getactivewindow key Home
BurninLeo
Parece que estás tratando de simular un diseño de teclado alemán. ¿Por qué no cambias la distribución del teclado en la configuración del sistema?
Rapti

Respuestas:

4

El problema xdotooles que, mientras se presionan las teclas reales, Xorg envía repetidamente eventos de pulsación de teclas (mira la xevsalida). Para superar esto, debe desactivar temporalmente la función de repetición, luego generar el evento KeyRelease en la tecla que estaba inactiva.

En vez de

"sleep 0.2 && xdotool type --delay 15 '{'"
  Control+Alt + 7

prueba lo siguiente:

"xset r off; xdotool keyup --window 0 7 type --clearmodifiers --window 0 '{'; xset r on"
  Control+Alt + 7
midenok
fuente
Gracias por su respuesta, pero estoy usando Manjaro con XFCE de vez en cuando funcionó de inmediato, por lo que no es necesario dormir.
Ello
@Ello, estas respuestas no son solo para ti, por lo que apreciamos la solución más universal.
midenok
3

Cuando probé varias cosas más, noté que xdotool parece desencadenarse demasiado pronto. Modifiqué la configuración de esta manera:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7

AHORA envía el signo {correcto a la ventana activa. Ahora lo único que queda es reducir el sueño y la demora a un valor viable, porque 1 segundo parece demasiado largo :)

** Información adicional ** Bueno, ahora logré encontrar valores adecuados. SIN EMBARGO, esto solo funciona si sueltas las teclas hasta que la duración del sueño haya terminado. Si eres demasiado lento, no funcionará.

Esta es mi configuración actual para todos los caracteres alemanes AltGr poco convenientes

"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7

"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q

"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e

"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8

"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9

"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0

"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus

Sin embargo, si desea escribir múltiples signos @ (por ejemplo), debe presionar Ctrl + Alt + Q según lo previsto, pero suelte todas las teclas y luego vuelva a presionarlo. Esto, sin embargo, es mucho, mucho mejor que no tener la opción Control + Alt en lugar de AltGr, pero no es tan efectiva como yo también la usaba. Quizás encuentre una solución para esto también.

Ello
fuente
Esto es muy extraño, me alegra que lo hayas solucionado, pero realmente no puedo entender por qué está sucediendo. De todos modos, gracias por tomarse el tiempo para publicar esto, podría ayudar a la siguiente persona con el mismo problema.
terdon
En lugar de sleep, creo que quieres agregar + releasea los combos clave. Eso le indicará xbindkeysque espere hasta que se suelte la tecla antes de activar el comando.
wjandrea
2

Recientemente tuve este problema, donde traté de simular la tecla Reproducir / Pausar medios (XF86AudioPlay) usando Ctrl + G. Después de investigar, parece que no solo necesito cancelar el Control , sino también la tecla g (que es para qué necesitaba el sleep 0.1retraso). Si cancelo ambas teclas usando keyupxdotool y el interruptor --clearmodifiers, funciona. Este es mi nuevo comando, en mi archivo .xbindkeys.rc:

"xdotool keyup g key --clearmodifiers XF86AudioPlay"
Control + g
QuickishFM
fuente
1

No estoy seguro de por qué no funciona xbindkeys, supongo que debe especificar la ventana para escribir. Como solución alternativa, puede usar xvkbden su lugar.

  1. Instalar en pc xvkbd

    sudo apt-get install xvkbd
    
  2. Agregue esto a su .xbindkeysrcarchivo

    "xvkbd -text '{'"
    Control+Alt + 7
    

Eso debería funcionar.


Notas

Por alguna razón, en mi máquina, xvkbdestoy usando uno de mis diseños secundarios (español) en lugar del principal (inglés de EE. UU.) Y esto hace {que realmente se imprima ". Si también tiene este problema, solo juegue un poco para averiguar qué tecla corresponde {con el diseño utilizado. Alternativamente, puede profundizar y descubrir de dónde xvkbdobtiene su localeconfiguración.

terdon
fuente
todavía no funciona. incluso con los personajes adecuados. si escribo xvkbd -text 'apple' en la consola, imprime apple, si lo ejecuto a través de xbindkeys, no pasa nada. si miro xbindkeys -v veo que reconoce el comando presionado
Ello
lo tengo para trabajar, pero con algo más
Ello
@Ello genial! ¿Que usaste? Funcionó bien para mí. ¿Podría publicar una respuesta explicando su solución y aceptarla?
terdon
Modifiqué mi publicación, no puedo responder mis propias preguntas por falta de reputación. Lo siento
Ello