it-swarm.com.de

Kann ich Hot Corners so einstellen, dass benutzerdefinierte Befehle in Unity ausgeführt werden?

Ich mag Hot Corners wirklich. :-)

Ist es irgendwie möglich, einen benutzerdefinierten Befehl an einer Hot-Corner auszuführen, wie unten gezeigt?

enter image description here

12
orschiro

CCSM

  1. Installieren Sie den CompizConfig Settings Manager (CCSM). Im Terminal ausführen:

    Sudo apt-get install compizconfig-settings-manager
    
  2. Öffnen Sie CCSM.

  3. Gehe zu "Befehle"
  4. Geben Sie Ihren gewünschten Befehl in einen der Steckplätze ein. Z.B:

    CCSM screenshot - command

  5. Gehen Sie zur Registerkarte "Kantenbindungen"

  6. Klicken Sie auf "Keine" und legen Sie die gewünschte heiße Ecke (oder Kante) fest, die dem gerade festgelegten Befehl entspricht

    CCSM screenshot - hot corners

  7. Bewegen Sie die Maus in die Ecke

  8. Jetzt wird dein Befehl ausgeführt!

    CCSM screenshot - command running

Bestätigt am 14.04.

10
wjandrea

Benutzerdefinierte Befehle

Wenn Sie Unity verwenden nd ccsm installiert haben, ist die Antwort von wjandrea natürlich Ihre Antwort. Wenn nicht ​​oder zur Verwendung in anderen Distributionen kann eine leichte Alternative nützlich sein.

Mit dem folgenden Skript können Sie den Befehl any für jeden Ihrer Hotcorners festlegen.

Als Beispiel habe ich folgendes Setup gemacht:

  • Oben links Keine Aktion
  • Oben rechts Gedit ausführen
  • Unten links Keine Aktion
  • Bottom RightRun Gnome-Terminal

Natürlich können Sie die Befehle auch dazu bringen, externe Skripte auszuführen.

Außerdem können Sie die Größe der heißen Ecke in der Zeile einstellen:

cornersize = 10

Ändern Sie einfach den Wert (Pixel). Das Skript legt (quadratische) Bereiche fest, um Ihre Befehle auszulösen:

enter image description here

Das Drehbuch

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

Konfiguration

  1. Das Skript benötigt xdotool

    Sudo apt install xdotool
    
  2. Kopieren Sie das Skript in eine leere Datei und speichern Sie es als hotcorners2.py
  3. Stellen Sie im Kopf des Skripts Ihre Befehle ein (beachten Sie die Anführungszeichen)

    commands = [
        None,
        "gedit",
        None,
        "gnome-terminal",
    ]
    

    (anschließend oben links/rechts, unten links/rechts)

  4. Führen Sie das Skript aus:

    python3 /path/to/hotcorners2.py
    
  5. Wenn alles in Ordnung ist, fügen Sie Startanwendungen hinzu: Dash> Startanwendungen> Hinzufügen. Fügen Sie den Befehl hinzu:

    /bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"
    

Anmerkungen

  • Das Skript wird derzeit auf dem (ersten) Bildschirm ausgeführt. Es kann leicht bearbeitet werden, um sich um mehrere Bildschirme zu kümmern.
  • Wenn ein paar Leute es mögen, können wir eine GUI und eine PPA für die bequeme Nutzung und einfache Installation hinzufügen.

BEARBEITEN

Wenn wir etwas fortgeschrittener rechnen, können wir anstelle eines quadratischen Bereichs ein radius verwenden, um die Befehle auszulösen (dank des guten alten @pythagoras):

enter image description here

Kleiner Unterschied, aber nur zum Spaß:

Das Drehbuch

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

Verwendungszweck

Ist so ziemlich das Gleiche. Stellen Sie Ihre Befehle und den auszulösenden Radius im Kopfbereich des Skripts ein.

6
Jacob Vlijm

HINWEIS:

Die Antwort von wjandrea ist die am besten geeignete Antwort für jemanden, der Ubuntu oder Ubuntu Kylin verwendet (oder compiz als Display Manager hat) Respekt. Die unten angegebene Antwort kann auch für Unity verwendet werden, ist jedoch wahrscheinlich etwas redundant. In Desktop-Umgebungen ohne Compiz kann jedoch der unten dargestellte Indikator verwendet werden. Ich habe es in Lubuntu 16.04 VM kurz getestet, daher weiß ich, dass es dort funktioniert, und habe es auch mit Kylin 14.04 kompatibel gemacht. Für GNOME- und MATE -Desktops muss zuerst die Unterstützung für AppIndicators aktiviert werden, damit Indikatoren verwendet werden können.

Einführung

Ich habe indicator-edger implementiert, mit dem benutzerdefinierte Befehle basierend auf der Mausposition an einer beliebigen Stelle entlang der 4 Bildschirmränder ausgelöst werden können. Die ursprüngliche Version wurde innerhalb eines Tages, in ungefähr 7 Stunden, fertiggestellt, daher ist sie ziemlich minimalistisch, erledigt aber die Arbeit.

enter image description here

Der Indikator wird über die Datei ~/.edger-commands.json gesteuert, offensichtlich im Format json. Es kann manuell vom Benutzer geschrieben oder über die Option DEFINE COMMANDS des Indikators eingestellt werden. Die Aktivierungs-/Deaktivierungs-Auslöseoption wird gespeichert und automatisch in die Datei geschrieben, damit der Benutzer sie verwenden kann. Die Beispielkonfigurationsdatei sieht folgendermaßen aus:

{
    "right": "gnome-terminal",
    "top": "firefox",
    "left": "",
    "bottom": "gnome-screenshot",
    "enabled": true
}

Beachten Sie den Eintrag "left" in der Datei. Diese Kante ist nicht gesetzt, erfordert jedoch aufgrund der json -Syntax eine leere Zeichenfolge, d. H. Anführungszeichen "".

Sobald der Indikator feststellt, dass der Benutzer die Maus an einer der Kanten platziert hat (mit einem Rand von ~ 3 Pixel), sendet der Indikator eine Blasenbenachrichtigung und führt den entsprechenden Befehl aus (falls definiert). Die Aktivierung des Auslösers wird erst wiederholt, wenn der Benutzer die Maus vom Edge wegbewegt.

enter image description here

Wie Sie dem obigen Screenshot entnehmen können, enthält der Indikator auch Debugging-Ausgaben in der Befehlszeile. Wenn Sie Fehler finden, können Sie diese auf dem Terminal ausführen, herausfinden, welcher Fehler auftritt, und den entsprechenden Fehlerbericht auf der Issues-Seite des GitHub-Projekts einreichen . ).

Gegenwärtig gibt es keine Unterstützung für Ecken (nur Kanten) und es wurde für die Einrichtung mit einem Monitor entwickelt (offensichtlich kann man nicht alle Basen innerhalb von 7 Stunden nach der Erstellung abdecken), aber diese Funktionen könnten später verfügbar sein.

Installations- und Quellcode

Der Quellcode ist auf der Projektseite von GitHub oder über das Launchpad verfügbar. Die Installation erfolgt über die folgenden Befehle im Terminal:

Sudo add-apt-repository ppa:1047481448-2/sergkolo
Sudo apt-get update
Sudo apt-get install indicator-edger
5