Il wmctrl
program è proprio quello che stai cercando (sudo apt-get install wmctrl
). Puoi usare il wmctrl -a "AppTitle"
comando per portare l'app in primo piano. wmctrl -l
elencherà tutte le finestre disponibili, quindi dovrebbe essere facile scrivere uno script di shell che controlla se il tuo programma è in esecuzione e lo avvia o lo porta in primo piano. Quindi puoi semplicemente associarlo a una scorciatoia da tastiera.
Per prima cosa salva il seguente script da qualche parte, userò /home/jtb/code/bringToFront
. Occorrono due argomenti, il primo è ciò che digiteresti al terminale per avviare il programma, il secondo è una sottostringa del titolo della finestra del programma. Se nel titolo non è presente una stringa univoca costante, dovrai lavorare un po' di più per trovare la finestra del programma.
#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]
then
wmctrl -a "$2"
else
$1 &
fi
-
Con lo script nella directory corrente, esegui
chmod +x bringToFront
per rendere eseguibile lo script. Quindi assicurati che funzioni; per avviare/mettere a fuoco firefox puoi eseguire./bringToFront firefox "Mozilla Firefox"
. -
Ora dobbiamo associare un tasto di scelta rapida. Esegui
gconf-editor
e naviga nella struttura delle cartelle a sinistra fino a/apps/metacity/keybinding_commands
. -
Fai doppio clic sul primo
command
con un valore vuoto, probabilmentecommand_1
. Digita il percorso completo dello script e fornisci i due parametri, ad es./home/jtb/code/bringToFront firefox Firefox
. -
Dal pannello a sinistra, seleziona
global_keybindings
, la cartella successiva. Trova ilrun
voce corrispondente al comando appena definito, probabilmenterun_command_1
. Fare doppio clic su di esso e digitare la scorciatoia da tastiera che si desidera utilizzare. Metti i modificatori tra parentesi angolari, ad es.<Ctrl><Alt>F
.
Adesso Controlla + Alt + F porterà la finestra di firefox in primo piano o la avvierà se non è già in esecuzione.
Ecco un altro modo per farlo con xdotools
. Il processo da visualizzare è riconosciuto dalla riga di comando emessa per eseguirlo (non è necessario alcun file pid o titolo di finestra univoco).
#!/bin/bash
cmd="[email protected]"
# command line to be run. Note that the resulting
# process will hold this in /proc/PID/cmdline
pid=`pgrep -nf "^$cmd$"`
# most recent process having "$cmd" in /proc/PID/cmdline
if [ -z "$pid" ]; then # no pid
exec $cmd
# run command
else
winid=`xdotool search --all --pid $pid --onlyvisible | head -1`
# first visible window owned by pid
xdotool windowactivate $winid
# give window focus
fi