web-dev-qa-db-fra.com

Puis-je configurer Hot Corners pour exécuter des commandes personnalisées dans Unity?

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?

enter image description here

12
orschiro

CCSM

  1. Installez CompizConfig Settings Manager (CCSM). Run in terminal:

    Sudo apt-get install compizconfig-settings-manager
    
  2. Ouvrir CCSM.

  3. Allez dans "Commandes"
  4. Entrez votre commande souhaitée dans l'un des emplacements. Par exemple:

    CCSM screenshot - command

  5. Allez à l'onglet "Reliures de bord"

  6. Cliquez sur "Aucun" et définissez le coin actif souhaité (ou Edge), qui correspond à la commande que vous venez de définir.

    CCSM screenshot - hot corners

  7. Déplacez votre souris vers le coin

  8. Maintenant, votre commande est exécutée!

    CCSM screenshot - command running

Confirmé de travailler sur 14.04.

10
wjandrea

Commandes personnalisées

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:

  • En haut à gauche aucune action
  • En haut à droite Exécuter Gedit ​​
  • En bas à gauche aucune action
  • Bottom RightRun Gnome-terminal

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:

enter image description here

Le scénario

#!/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

Installer

  1. Le script a besoin de xdotool

    Sudo apt install xdotool
    
  2. Copiez le script dans un fichier vide, enregistrez i sous hotcorners2.py
  3. 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)

  4. Test- lance le script:

    python3 /path/to/hotcorners2.py
    
  5. 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"
    

Remarques

  • Le script est actuellement exécuté sur le premier écran. Il peut être facilement édité pour prendre en charge plusieurs écrans, même faire différentes choses dans différents écrans, veuillez mentionner.
  • Si quelques personnes le souhaitent, nous pouvons ajouter une interface graphique et un ppa pour une utilisation pratique et une installation facile.

MODIFIER

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):

enter image description here

Petite différence, mais juste pour le plaisir:

Le scénario

#!/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

Usage

Est à peu près la même chose. Définissez vos commandes et le rayon à déclencher dans la section head du script.

6
Jacob Vlijm

REMARQUE:

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.

Introduction

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.

enter image description here

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.

enter image description here

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.

Installation et code source

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
5
Sergiy Kolodyazhnyy