Come creare un collegamento che esegue un comando xdotool per simulare la pressione di un tasto?


10

Sto cercando di simulare la pressione di un tasto multimediale utilizzando un collegamento personalizzato.

Finora sono stato in grado di ottenere la simulazione di cui ho bisogno usando il comando:

xdotool key XF86AudioPlay

Funziona perfettamente, mette in pausa o avvia il lettore musicale ogni volta che viene eseguito.

Il problema si presenta quando si tenta di eseguirlo come collegamento.

Innanzitutto ho provato a eseguire un alias con un collegamento personalizzato, ma non ha funzionato.

Come spiegato su questa domanda :

I comandi eseguiti dai collegamenti della tastiera non vengono analizzati tramite una shell. La soluzione migliore è creare un cestino della directory nel tuo homedir.

Successivamente ho creato lo script suggerito e l'ho chiamato simplay:

#!/bin/sh
xdotool key XF86AudioPlay

Si trova all'interno di una cartella bin che fa parte di PATH, funziona benissimo e può essere eseguito da qualsiasi posizione.

Quando ho provato a creare il collegamento personalizzato, non sono riuscito a farlo funzionare, la configurazione è la seguente:

Name: test
Command: simplay

Shortcut: Ctrl+Alt+R

Dopo aver cercato un po 'di più, ho trovato un altro modo per eseguire il collegamento:

gnome-terminal -e simplay

L'ho provato su un terminale e ho notato che durante l'esecuzione si apriva rapidamente una nuova finestra del terminale, eseguiva il processo figlio, sospendendo la musica e chiudendo immediatamente la finestra.

Ho cambiato il comando sul collegamento e quando lo ho colpito ho notato lo stesso comportamento aprendo un terminale e chiudendolo immediatamente ma questa volta il processo figlio non ha messo in pausa la musica, il che mi fa pensare che lo script sia stato richiamato su tutti i miei precedenti tentativi ma in qualche modo non è in grado di eseguire.

Come posso risolvere questo problema in base alle tue conoscenze?

Risposte:


12

Il problema

Il collegamento viene eseguito contemporaneamente alla pressione del tasto simulato

Se esegui un comando, simulando una pressione del tasto, chiamata con ... un'altra pressione del tasto, simulerai effettivamente una terza pressione del tasto, che è la combinazione di entrambi :)

Risolvere

È necessario impedire l'esecuzione del collegamento contemporaneamente alla pressione del tasto simulato, in altre parole, aggiungere un ritardo:

/bin/bash -c "sleep 1 && xdotool key XF86AudioPlay"

Aggiungi questo comando a un collegamento e dovrebbe funzionare.

Nota

Ovviamente puoi giocare un po 'con il valore in sleep 1, per impostarlo sul valore migliore che ti fa sentire a tuo agio, a seconda di quanto "appiccicosa" viene premuta la combinazione. sleep 0.5potrebbe benissimo farlo e rendere più rapida la scorciatoia.


8

È inoltre possibile utilizzare il comando direttamente nella definizione del collegamento, quindi non è necessario creare uno script autonomo per esso.

Invece di utilizzare la soluzione alternativa "sleep 1" è possibile utilizzare il --clearmodifiersflag, ovvero il collegamento personalizzato sarebbe simile al seguente:

Name: test
Command: xdotool key --clearmodifiers XF86AudioPlay

Shortcut: Ctrl+Alt+R

Per me questo funziona quando si mappano le scorciatoie su Super+F9.


Lo snippet di codice sopra è pensato per essere un file? Se è così, devi metterlo in un posto particolare o eseguire un comando particolare per implementare il collegamento?
JellicleCat,

1
Lo snippet è solo una descrizione del collegamento che ho usato. In Ubuntu è possibile creare scorciatoie personalizzate nelle impostazioni della tastiera. Tuttavia, da allora ho aggiornato la mia versione di Ubuntu e ora sono in grado di mappare direttamente l'azione "Riproduci (o riproduci / pausa)" su una combinazione chiave di mia scelta, che si rivela più affidabile rispetto all'utilizzo di xdotool.
Jan

Ancora meglio di un --clearmodifiers è emettere un "keyup" per il tasto di scelta rapida che si sta usando per chiamare lo script. Il leggero svantaggio è che è necessario aggiornare lo script se si modifica il tasto di scelta rapida per chiamare lo script.
vanadio,

1

Un'alternativa (per prestazioni più scattanti) all'utilizzo sleep 1 && xdotool ...è l'uso di xdotool per rilasciare i tasti di scelta rapida. Un po 'più lungo, ma puoi anche usarlo

/bin/bash -c "xdotool keyup R Alt_L Ctrl_L && xdotool key XF86AudioPlay"
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.