Erstellen Sie Tastaturkürzel, um Fenster ohne Compiz auf verschiedene Monitore zu verschieben

7

Ich verwende Ubuntu MATE 16.04 und ich liebe es sofort. Das einzige, was ich dazu brauche, ist die Möglichkeit, meine Fenster über die Tastatur auf verschiedene Monitore zu verschieben.

Ich habe CompizConfig Settings Manager verwendet und es funktioniert, aber Compiz verursacht eine lange Liste von Problemen auf meinem System, die verschwinden, wenn ich es deaktiviere. Compiz ist ein großes Paket und alles, was ich möchte, ist die Möglichkeit, meine Fenster auf einen anderen Monitor zu verschieben. Alle anderen Funktionen sind bereits in das Ubuntu MATE 16.04 LTS-Tastaturkürzelmenü integriert (Arbeitsbereiche wechseln, Fenster in Arbeitsbereich verschieben, nach links, rechts, horizontal, vertikal kacheln usw.).

Das Fenster nach Osten (rechts) des Bildschirms und das Fenster nach Westen (links) des Bildschirms verschieben funktioniert aus irgendeinem Grund nicht bei allen Anwendungen (insbesondere Firefox, aber Chrome und andere funktionieren).

Gibt es eine Anleitung, die zeigt, wie Sie Ihre eigenen Tastaturkürzel erstellen? Ich habe eine Seite gefunden, auf der jemand seine eigenen für Xubuntu gemacht hat. Hat jemand eine einfache Methode zum Erstellen von Tastaturkürzeln, mit denen Fenster zwischen Monitoren verschoben werden, während ich versuche herauszufinden, was sie getan haben?

jtlindsey
quelle
Sicher, kann über ein oder zwei Skripte erfolgen. Wenn ich das richtig verstanden habe, möchten Sie nur eine Verknüpfung, mit der das Fenster in Ihrem Dual-Screen-Setup von einem Monitor zum anderen springt. Ist das korrekt ?
Sergiy Kolodyazhnyy
Serg, ja das stimmt.
Jtlindsey
OK, ich werde versuchen, ein Skript zu skizzieren. Wahrscheinlich wird es morgen aufgrund einiger Zeitprobleme veröffentlicht.
Sergiy Kolodyazhnyy
Schickte eine Antwort mit Anweisungen. Bitte lassen Sie mich wissen, ob dies für Sie in Ordnung ist. Ich habe es auf meinem Dual-Screen-Setup getestet. Der Code sollte für mehr als zwei Bildschirme funktionieren, aber ich habe leider keinen Zugriff auf zusätzliche Hardware. Lassen Sie mich wissen, wenn Sie weitere Fragen haben
Sergiy Kolodyazhnyy

Antworten:

8

Einführung

window_jumper.pyist ein Python-Skript, das das aktive Fenster im Zyklus über mehrere Monitore hinweg bewegt. Wenn Sie beispielsweise drei Monitore A, B und C haben, wird durch wiederholtes Drücken der zugewiesenen Verknüpfung das Fenster von A nach B, nach C und zurück nach A verschoben. Die Fensterplatzierung befindet sich in der oberen linken Ecke jedes Bildschirms .

Verwendungszweck

Skript manuell ausführen

python window_jumper.py

Das Skript verfügt über keine Befehlszeilenoptionen (ab sofort, möglicherweise jedoch in Zukunft).

Tastaturkürzel einrichten

Ubuntu Unity Schritte:

  1. Gehen Sie zu System Settings-> KeyboardShortcuts tab, wählen Custom ShortcutsSie die +Schaltfläche aus und klicken Sie darauf . Das Popup "Benutzerdefinierte Verknüpfung" wird mit zwei Feldern Name:und angezeigtCommand:

  2. NameNennen Sie es für Feld window_jumper. Geben Sie Command:den vollständigen Pfad zur Skriptdatei an. Zum Beispiel python /home/ubuntu_user/bin/window_jumper.py. KlickenApply

  3. Klicken Sie auf die Spalte ganz rechts. Die Wörter New acceleratorwerden angezeigt. Drücken Sie die Tastenkombination, die Sie für dieses Skript festlegen möchten. Zum Beispiel habe ich gewähltCtrlSuperJ

Ubuntu Mate Anleitung:

  1. Gehen Sie zu SystemControl CenterKeyboard Shortcuts, klicken Sie Add. Das Popup "Benutzerdefinierte Verknüpfung" wird mit zwei Feldern Name:und angezeigtCommand:

  2. NameNennen Sie es für Feld window_jumper. Geben Sie Command:den vollständigen Pfad zur Skriptdatei an. Zum Beispiel python /home/ubuntu_user/bin/window_jumper.py. KlickenApply

  3. Die Spalte ganz rechts (beschriftet Shortcut) enthält Wörter Disabledin der Zeile. Klicken Sie auf die Wörter, der Text ändert sich zu New shortcut. Drücken Sie die gewünschte Tastenkombination.

Skriptquelle

Auch wie bei GitHub erhältlich . Wenn Sie ein GitHub-Konto haben, senden Sie dort bitte Probleme und Funktionsanfragen.

#!/usr/bin/env python
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import GdkX11, Gdk, Gtk


def main():

    DEBUG = False

    screen = GdkX11.X11Screen.get_default()
    monitors = []
    for monitor in range(screen.get_n_monitors()):
        monitors.append(
            [screen.get_monitor_geometry(monitor).x,
             screen.get_monitor_geometry(monitor).y])

    if DEBUG:
        print monitors

    active_window = screen.get_active_window()
    active_window_location = screen.get_monitor_at_window(active_window)

    new_location = None
    new_location = active_window_location + 1
    if active_window_location + 1 >= monitors.__len__():
        new_location = 0
    new_screen = monitors[new_location]
    if DEBUG:
        print new_screen

    active_window.move(new_screen[0], new_screen[1])
    screen.get_active_window()
    # TODO: add resizing window routine in cases where
    # a window is larger than the size of the screen
    # to which we're moving it.

if __name__ == "__main__":
    main()

Randnotizen:

  • Der Code kann sich ändern oder nicht, um zusätzliche Funktionen einzuschließen.
  • Falls du einen ImportError: No module named giLauf erhältstsudo apt install python-gi (Danke Dariusz für den Kommentar )
Sergiy Kolodyazhnyy
quelle
Funktioniert gut! Ich wusste es nicht 1 GdkX11. Ist new_location = None notwendig? Es wird sowieso in der nächsten Zeile definiert.
Jacob Vlijm
@JacobVlijm Es ist meine Gewohnheit, Variablen zu deklarieren, bevor ich sie verwende, da ich aus dem C-Hintergrund komme. Aber das ist hier nicht nötig. Es ist jedoch bei Schleifen notwendig, ich bin in der Vergangenheit auf dieses Problem gestoßen. GdkX11 ist schön, obwohl es einige Macken gibt. Zumindest ist keine zusätzliche Paketinstallation erforderlich.
Sergiy Kolodyazhnyy
Ich bin mir nicht sicher, ich glaube nicht, dass python-gies standardmäßig installiert ist. Warten Sie ... es muss sein.
Jacob Vlijm
1
@Serg Ich bin gerade nach Hause gekommen und habe es auf Ubuntu Mate getestet. Es funktioniert hervorragend mit meinem Dual-Monitor-Setup. Tolles Scripting :-)
jtlindsey
1
Wenn Sie "ImportError: Kein Modul mit dem Namen gi" erhalten, führen Sie "sudo apt install python-gi" aus.
Dariusz