Xbindkeys non funzionerà correttamente


9

Ho un po 'di problemi. Volevo rimappare alcuni tasti di scelta rapida a cui sono abituato dal mio sistema precedente, ma non riesco a farlo funzionare correttamente xbindkeys.

xbindkeys riconosce la combinazione ma in qualche modo il comando non si attiva.

Se uso il comando

xdotool key braceleft

Mi dà il {segno corretto nella console. Tuttavia se uso lo stesso comando in xbindkeys non succede nulla. Se sostituisco il comando con firefoxesso funziona correttamente e apre Firefox, quindi credo funzioni xbindkeys.

Voglio ottenere quanto segue:

Voglio digitare il personaggio {nella finestra attiva con Alt_R+ 7o Alt_Left+ Ctrl+ in 7modo da poter usare entrambi. So che Alt_R(AltGr) è il modo corretto, ma sulle tastiere tedesche è in qualche modo difficile digitare il braceleft con il AltGrtasto (Alt_R), quindi DEVO usare invece Alt_L+ Control+ 7(come ero abituato nel mio sistema precedente). In qualche modo l'ho fatto funzionare correttamente in 12.04, ma non riesco a farlo funzionare in 14.04.

Eventuali suggerimenti? Ho provato diversi comandi. Funzionavano tutti nella console, ma nessuno funzionava quando eseguito da xbindkeys

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

Questa è la mia configurazione, che non funzionerà

"xdotool key braceleft"
Control+Alt + 7

Tuttavia, questo funziona:

"firefox"
Control+Alt + 7

Modifica soluzione

Mentre provavo altre cose, ho notato che xdotool sembra innescarsi troppo presto. Ho modificato la configurazione in questo modo:

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

ORA invia il segno {corretto alla finestra attiva. Ora l'unica cosa rimasta è ridurre il sonno e ritardare a un valore praticabile, perché 1 secondo sembra un po 'troppo lungo :)

** Informazioni sull'aggiunta ** Bene, ora sono riuscito a trovare i valori adatti. TUTTAVIA funziona solo se si rilasciano i tasti fino al termine della durata del sonno. Se sei troppo lento se non funziona.

Questa è la mia configurazione attuale per tutti i personaggi AltGr tedeschi non convenzionali

"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

Tuttavia, se si desidera digitare più segni @ (ad esempio) è necessario premere Ctrl + Alt + Q come previsto, ma rilasciare tutti i tasti e quindi premerlo di nuovo. Questo, tuttavia, è molto, molto meglio che non avere l'opzione Control + Alt invece di AltGr, ma non è così efficace come sono stato usato anch'io. Forse troverò una soluzione anche per questo.


Eh, questa è una buona scoperta! Non vi è alcun limite di rappresentanza per rispondere alla propria domanda, solo un limite di tempo . Sarebbe bello se potessi tornare a pubblicare questo post come risposta entro 6 ore. Questo ti darà anche qualche rappresentante se ti interessa. Se davvero non ti interessa, includerò la tua soluzione nella mia risposta tra qualche giorno.
— terdon,

Hai mai capito come xdotoolripetere il tasto mentre tieni premuto?
— Farzher,

Ad essere sincero, ormai non l'ho provato. Sono riuscito a far funzionare senza problemi League of Legends con 60 fps (nel 12.04 non sarebbe iniziato affatto) così, quando sono a casa, ho giocato tutto il tempo.
— Ello,

Non ho avuto alcune scorciatoie funzionanti per giorni. La soluzione era semplice: il mio desktop Ubuntu aveva le scorciatoie prima di xbindkeys. Basta modificare le impostazioni della kayboard, aggiungere una nuova scorciatoia personalizzata con azionexdotool getactivewindow key Home
— BurninLeo,

Sembra che tu stia cercando di simulare un layout di tastiera tedesco. Perché non cambi semplicemente il layout della tastiera nelle impostazioni di sistema?
— Rapti,

Risposte:


4

Il problema xdotoolè che mentre vengono premuti i tasti reali Xorg invia ripetutamente eventi di pressione dei tasti (guarda l' xevoutput). Per ovviare a questo problema, è necessario disattivare temporaneamente la funzione di ripetizione, quindi generare l'evento KeyRelease sul tasto inattivo.

Invece di

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

prova quanto segue:

"xset r off; xdotool keyup --window 0 7 type --clearmodifiers --window 0 '{'; xset r on"
  Control+Alt + 7

Grazie per la tua risposta, ma sto usando Manjaro con XFCE ora e lì ha funzionato fuori dalla scatola, quindi non è necessario dormire.
— Ello,

@Ello, queste risposte non sono solo per te, quindi la soluzione più universale è apprezzata.
— midenok,

3

Mentre provavo altre cose, ho notato che xdotool sembra innescarsi troppo presto. Ho modificato la configurazione in questo modo:

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

ORA invia il segno {corretto alla finestra attiva. Ora l'unica cosa rimasta è ridurre il sonno e ritardare a un valore praticabile, perché 1 secondo sembra un po 'troppo lungo :)

** Informazioni sull'aggiunta ** Bene, ora sono riuscito a trovare i valori adatti. TUTTAVIA funziona solo se si rilasciano i tasti fino al termine della durata del sonno. Se sei troppo lento se non funziona.

Questa è la mia configurazione attuale per tutti i personaggi AltGr tedeschi non convenzionali

"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

Tuttavia, se si desidera digitare più segni @ (ad esempio) è necessario premere Ctrl + Alt + Q come previsto, ma rilasciare tutti i tasti e quindi premerlo di nuovo. Questo, tuttavia, è molto, molto meglio che non avere l'opzione Control + Alt invece di AltGr, ma non è così efficace come sono stato usato anch'io. Forse troverò una soluzione anche per questo.


È molto strano, sono contento che tu l'abbia capito, ma non riesco davvero a capire perché stia succedendo. Comunque, grazie per aver dedicato del tempo a pubblicare questo, potrebbe aiutare la persona successiva con lo stesso problema.
— terdon,

Invece sleep, penso che tu voglia aggiungere + releasele combinazioni di tasti. Questo dirà xbindkeysdi attendere fino al rilascio del tasto prima di attivare il comando.
— wjandrea,


2

Recentemente ho avuto questo problema, in cui ho provato a simulare il tasto Play / Pausa multimediale (XF86AudioPlay) usando Ctrl + G. Dopo alcune ricerche, è apparso non solo bisogno di annullare il controllo , ma anche il tasto g (che è di cosa aveva bisogno il sleep 0.1ritardo per cominciare). Se cancello entrambi questi tasti usando keyupdentro xdotool e l'interruttore --clearmodifiers, funziona. Questo è il mio nuovo comando, nel mio file .xbindkeys.rc:

"xdotool keyup g key --clearmodifiers XF86AudioPlay"
Control + g

1

Non sono sicuro del motivo per cui non funziona xbindkeys, suppongo sia necessario specificare la finestra in cui scrivere. Come soluzione alternativa, è possibile utilizzare xvkbdinvece.

  1. Installare xvkbd

    sudo apt-get install xvkbd
    
  2. Aggiungi questo al tuo .xbindkeysrcfile

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

Dovrebbe funzionare.


APPUNTI

Per qualche motivo, sulla mia macchina, xvkbdsta usando uno dei miei layout secondari (spagnolo) invece di quello principale (inglese americano) e questo causa la {stampa ". Se hai anche questo problema, basta giocare un po 'per scoprire a quale tasto corrisponde {il layout utilizzato. In alternativa, puoi scavare più a fondo e capire da dove xvkbdottiene le sue localeimpostazioni.


continua a non funzionare. anche con caratteri propri. se scrivo xvkbd -text 'apple' nella console, stampa apple, se lo eseguo tramite xbindkeys, non succede nulla. se guardo xbindkeys -v vedo che ha riconosciuto il comando premuto
— Ello

l'ho fatto funzionare, ma con qualcos'altro
— Ello,

@Ello fantastico! Che cosa hai usato? Ha funzionato bene per me. Potresti pubblicare una risposta che spieghi la tua soluzione e accettarla?
— terdon,

Ho modificato il mio post, non posso rispondere alle mie domande a causa della mancanza di reputazione. Siamo spiacenti
— Ello il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.