Mi piacciono molto gli Hot Corners. :-)
È in qualche modo possibile eseguire un comando personalizzato su un angolo caldo come mostrato di seguito?
Mi piacciono molto gli Hot Corners. :-)
È in qualche modo possibile eseguire un comando personalizzato su un angolo caldo come mostrato di seguito?
Risposte:
Installa CompizConfig Settings Manager (CCSM). Esegui nel terminale:
sudo apt-get install compizconfig-settings-manager
Apri CCSM.
Immettere il comando desiderato in uno degli slot. Per esempio:
Vai alla scheda "Edge Bindings"
Fai clic su "Nessuno" e imposta l'angolo attivo (o il bordo) desiderato, che corrisponde al comando appena impostato
Sposta il mouse sull'angolo
Ora il tuo comando è eseguito!
Confermato il lavoro il 14.04.
Se stai usando Unity e hai installato ccsm, ovviamente la risposta di wjandrea è la tua risposta. In caso contrario , o da utilizzare su altre distro, un'alternativa leggera potrebbe essere utile.
Con lo script seguente, puoi impostare qualsiasi comando, specifico per ciascuno dei tuoi hotcorner.
Ad esempio, ho effettuato la seguente configurazione:
Ovviamente puoi anche fare in modo che i comandi eseguano script esterni.
Inoltre, puoi impostare la dimensione dell'angolo caldo nella linea:
cornersize = 10
Basta cambiare il valore (pixel). Lo script imposta le aree (quadrate) per attivare i tuoi comandi:
#!/usr/bin/env python3
import subprocess
import time
cornersize = 20
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def get_pos():
return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]
scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]
match1 = None
while True:
time.sleep(1)
xy = get_pos()
x = xy[0]; y = xy[1]
test = [
[x < cornersize, y < cornersize],
[x > res[0]-cornersize, y < cornersize],
[x < cornersize, y > res[1]-cornersize],
[x > res[0]-cornersize, y > res[1]-cornersize],
]
match2 = [i for i, p in enumerate(test) if all(p)]
if match2 != match1:
if match2:
cmd = commands[match2[0]]
if cmd:
subprocess.Popen(["/bin/bash", "-c", cmd])
match1 = match2
La sceneggiatura ha bisogno xdotool
sudo apt install xdotool
hotcorners2.py
Nella testa dello script, imposta i tuoi comandi (attenzione alle virgolette)
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
(successivamente in alto a sinistra / a destra, in basso a sinistra / a destra)
Prova- esegui lo script:
python3 /path/to/hotcorners2.py
Se tutto funziona correttamente, aggiungi ad Applicazioni di avvio: Dash> Applicazioni di avvio> Aggiungi. Aggiungi il comando:
/bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"
Se utilizziamo un calcolo un po 'più avanzato, possiamo usare un raggio anziché un'area quadrata per attivare i comandi (grazie al buon vecchio @pythagoras):
Piccola differenza, ma solo per divertimento:
#!/usr/bin/env python3
import subprocess
import math
import time
# set distance (hotcorner sensitivity)
radius = 20
# top-left, top-right, bottom-left, bottom-right
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def get_pos():
return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]
# get the resolution
scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]
# list the corners, could be more elegant no doubt
corners = [[0, 0], [res[0], 0], [0, res[1]], [res[0], res[1]]]
match1 = None
while True:
time.sleep(1)
pos = get_pos()
# get the current difference from the mousepointer to each of the corner (radius)
diff = [int(math.sqrt(sum([(c[i]-pos[i])**2 for i, n in enumerate(res)])))\
for c in corners]
# see if any of the corners is "approached" within the radius
match2 = [diff.index(n) for n in diff if n < radius]
# if so, and the corresponding command is not set to None, run it.
if all([match2 != match1, match2]):
cmd = commands[match2[0]]
if cmd:
subprocess.Popen(["/bin/bash", "-c", cmd])
match1 = match2
È praticamente lo stesso. Imposta i comandi e il raggio da attivare nella sezione head dello script.
La risposta di wjandrea è la risposta più adatta a chi usa Ubuntu o Ubuntu Kylin predefiniti (o ha compiz come display manager), quindi ottiene il mio voto e rispetto. La risposta fornita di seguito può essere utilizzata anche su Unity, ma probabilmente sarebbe leggermente ridondante. Tuttavia, negli ambienti desktop che non dispongono di compiz, è possibile utilizzare l'indicatore presentato di seguito. L'ho provato brevemente in Lubuntu 16.04 VM, quindi so che funziona lì e l'ho reso compatibile anche con Kylin 14.04. Per i desktop GNOME e MATE, è necessario innanzitutto avere il supporto per AppIndicator abilitato per poter utilizzare qualsiasi indicatore.
Ho implementato indicator-edger
che consente di attivare comandi definiti dall'utente in base alla posizione del mouse in qualsiasi punto lungo i 4 bordi dello schermo. La versione originale è stata realizzata in un giorno, in circa 7 ore, quindi è abbastanza minimalista ma fa il suo lavoro.
L'indicatore è controllato tramite ~/.edger-commands.json
file, ovviamente in json
formato. Può essere scritto manualmente dall'utente o impostato tramite l' DEFINE COMMANDS
opzione dell'indicatore . L'opzione di attivazione / disattivazione del trigger viene memorizzata e scritta automaticamente nel file per comodità dell'utente. Il file di configurazione di esempio sarebbe così:
{
"right": "gnome-terminal",
"top": "firefox",
"left": "",
"bottom": "gnome-screenshot",
"enabled": true
}
Nota la "left"
voce nel file. Quel bordo non è impostato, ma a causa della json
sintassi richiede una stringa vuota lì, cioè virgolette ""
.
Una volta che l'indicatore rileva che l'utente ha posizionato il mouse lungo uno dei bordi (con un margine di ~ 3 pixel), l'indicatore invierà una notifica a bolle ed eseguirà il comando appropriato (se definito). L'attivazione del grilletto non si ripeterà se l'utente non sposta il mouse dal bordo.
Come puoi vedere dallo screenshot sopra, l'indicatore ha anche un output di debug nella riga di comando. Se trovi qualche bug, sentiti libero di eseguirlo dal terminale, scopri quale errore si verifica e invia la segnalazione di bug appropriata nella pagina dei problemi di GitHub del progetto .
Attualmente non esiste supporto per gli angoli (solo bordi) ed è stato creato per la configurazione di un monitor (ovviamente, non è possibile coprire tutte le basi entro 7 ore dalla creazione), ma tali funzionalità potrebbero essere disponibili alla fine in futuro.
Il codice sorgente è disponibile nella pagina GitHub dei progetti o tramite Launchpad . L'installazione viene eseguita tramite i seguenti comandi nel terminale:
sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-edger