J'aime vraiment Hot Corners. :-)
Est-il possible en quelque sorte d'exécuter une commande personnalisée sur un coin actif, comme indiqué ci-dessous?
Installez CompizConfig Settings Manager (CCSM). Run in terminal:
Sudo apt-get install compizconfig-settings-manager
Ouvrir CCSM.
Entrez votre commande souhaitée dans l'un des emplacements. Par exemple:
Allez à l'onglet "Reliures de bord"
Cliquez sur "Aucun" et définissez le coin actif souhaité (ou Edge), qui correspond à la commande que vous venez de définir.
Déplacez votre souris vers le coin
Maintenant, votre commande est exécutée!
Confirmé de travailler sur 14.04.
Si vous utilisez Unity and si ccsm est installé, la réponse de wjandrea est bien entendu votre réponse. Sinon, ou à utiliser sur d’autres distributions, une alternative légère pourrait être utile.
Avec le script ci-dessous, vous pouvez définir la commande any, spécifique à chacun de vos points chauds.
A titre d'exemple, j'ai effectué la configuration suivante:
Bien sûr, vous pouvez également faire en sorte que les commandes exécutent des scripts externes.
En outre, vous pouvez définir la taille du coin actif dans la ligne:
cornersize = 10
Changez simplement la valeur (pixels). Le script définit des zones (carrés) pour déclencher vos commandes:
#!/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
Le script a besoin de xdotool
Sudo apt install xdotool
hotcorners2.py
Dans la tête du script, définissez vos commandes (attention aux guillemets)
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
(ensuite en haut à gauche/droite, en bas à gauche/droite)
Test- lance le script:
python3 /path/to/hotcorners2.py
Si tout fonctionne correctement, ajoutez à Applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:
/bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"
Si nous utilisons une informatique un peu plus avancée, nous pouvons utiliser un rayon au lieu d'une zone carrée pour déclencher les commandes (grâce au bon vieux @pythagoras):
Petite différence, mais juste pour le plaisir:
#!/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
Est à peu près la même chose. Définissez vos commandes et le rayon à déclencher dans la section head du script.
La réponse de wjandrea est la réponse la plus appropriée pour quelqu'un qui utilise par défaut Ubuntu ou Ubuntu Kylin (ou qui a compiz comme gestionnaire d'affichage), ce qui me permet de gagner mon respect et de m'élever. La réponse ci-dessous peut également être utilisée sur Unity, mais serait probablement légèrement redondante. Toutefois, sur les environnements de bureau non compiz, vous pouvez utiliser l'indicateur présenté ci-dessous. Je l'ai brièvement testé dans Lubuntu 16.04 VM, je sais donc que cela fonctionne là-bas et que cela est également compatible avec Kylin 14.04. Pour les bureaux GNOME et MATE, vous devez d'abord activer la prise en charge d'AppIndicators afin de pouvoir utiliser n'importe quel indicateur.
J'ai implémenté indicator-edger
qui permet de déclencher des commandes définies par l'utilisateur en fonction de la position de la souris n'importe où sur les 4 bords de l'écran. La version originale a été réalisée en un jour, en 7 heures environ. Elle est donc assez minimaliste mais fait l'affaire.
L'indicateur est contrôlé via le fichier ~/.edger-commands.json
, évidemment au format json
. Il peut être écrit manuellement par l'utilisateur ou défini via l'option DEFINE COMMANDS
de l'indicateur. L'option d'activation/désactivation est mémorisée et écrite automatiquement dans un fichier pour la commodité de l'utilisateur. Exemple de fichier de configuration ressemblerait à ceci:
{
"right": "gnome-terminal",
"top": "firefox",
"left": "",
"bottom": "gnome-screenshot",
"enabled": true
}
Notez l'entrée "left"
dans le fichier. Edge n’est pas défini, mais en raison de la syntaxe json
, il faut y insérer une chaîne vide, c’est-à-dire Guillemets ""
.
Une fois que l'indicateur détecte que l'utilisateur a placé la souris le long de l'un des bords (avec une marge d'environ 3 pixels), il envoie une notification par bulle et exécute la commande appropriée (si elle est définie). L'activation du déclencheur ne se répète que si l'utilisateur éloigne la souris du bord.
Comme vous pouvez le voir sur la capture d'écran ci-dessus, l'indicateur a également une sortie de débogage dans la ligne de commande. Si vous rencontrez des bogues, n'hésitez pas à les exécuter depuis le terminal, à découvrir quelle erreur s'est produite et à envoyer le rapport de bogue approprié sur page de problèmes du GitHub du projet .
Actuellement, il n'y a pas de support pour les coins (seulement les bords) et il a été construit pour une configuration à un moniteur (évidemment, on ne peut pas couvrir toutes les bases dans les 7 heures qui suivent la création), mais ces fonctionnalités pourraient être disponibles ultérieurement.
Le code source est disponible sur la page des projets GitHub ou via Launchpad . L'installation est effectuée via les commandes suivantes dans le terminal:
Sudo add-apt-repository ppa:1047481448-2/sergkolo
Sudo apt-get update
Sudo apt-get install indicator-edger