1. Skript zum Vertauschen aller Fenster von Bildschirm 1 -> Bildschirm 2 und umgekehrt
Das Skript geht davon aus, dass die Bildschirme dieselbe vertikale Auflösung haben und der linke Bildschirm der primäre ist. Die horizontale Auflösung beider Bildschirme wird vom Skript durchsucht.
Wie stellt man das ein
Das Skript muss wmctrl
installiert sein:
sudo apt-get install wmctrl
- Kopieren Sie das folgende Skript in eine leere Datei und speichern Sie es als
swap_windows
(keine Erweiterung) in ~/.bin
. Erstellen Sie das Verzeichnis, falls es noch nicht vorhanden ist, und machen Sie das Skript ausführbar .
- Wenn Sie das Verzeichnis gerade erstellt haben
~/bin
(es war noch nicht vorhanden), melden Sie sich entweder ab oder führen Sie es in einem Terminal aus : source ~/.profile
.
Testen Sie das Skript mit dem folgenden Befehl:
swap_windows
Wenn alles wie erwartet funktioniert, fügen Sie die Tastenkombination hinzu. Wählen Sie: Systemeinstellungen> "Tastatur"> "Verknüpfungen"> "Benutzerdefinierte Verknüpfungen". Klicken Sie auf das "+" und fügen Sie den Befehl hinzu
Das Skript
#!/usr/bin/env python3
import subprocess
import sys
def get(cmd):
return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_shiftright(xr_output):
lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
return int([it for it in lines if "x" in it][0].split("x")[0])
def get_shiftleft(xr_output):
lines = [l for l in xr_output.splitlines() if "+0" in l and not "+0+0" in l][0].split()
return -int([it for it in lines if "x" in it][0].split("x")[0])
def swap_windows():
xr_output = get("xrandr")
shift_r = get_shiftright(xr_output)
shift_l = get_shiftleft(xr_output)
w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
for w in w_data:
props = get("xprop -id "+w[0])
if any(["_TYPE_NORMAL" in props, "TYPE_DIALOG" in props]):
if 0 < int(w[2]) < shift_r:
shift = shift_r
elif shift_r-shift_l > int(w[2]) >= shift_r:
shift = -shift_r
else:
shift = 0
command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
subprocess.Popen(["/bin/bash", "-c", command])
swap_windows()
2. Skript zum Verschieben (aller) Fenster von einem Monitor auf den anderen
Das folgende Skript verschiebt Fenster in einem Dual-Monitor-Setup von einem Bildschirm auf einen anderen:
Abhängig von dem Argument, mit dem Sie es ausführen ( left
oder right
)
Das Skript geht (erneut) davon aus, dass die Bildschirme dieselbe vertikale Auflösung haben und der linke Bildschirm der primäre ist. Die horizontale Auflösung beider Bildschirme wird vom Skript durchsucht.
Wie stellt man das ein
Das Skript muss wmctrl
installiert sein:
sudo apt-get install wmctrl
- Kopieren Sie das folgende Skript in eine leere Datei und speichern Sie es als
shift_windows
(keine Erweiterung) in ~/.bin
. Erstellen Sie das Verzeichnis, falls es noch nicht vorhanden ist, und machen Sie das Skript ausführbar .
- Wenn Sie das Verzeichnis gerade erstellt haben
~/bin
(es war noch nicht vorhanden), melden Sie sich entweder ab oder führen Sie es in einem Terminal aus : source ~/.profile
.
Testen Sie das Skript mit den Befehlen
shift_windows right
und: shift_windows left
Im ersten Fall sollten sich die Fenster auf Ihrem linken Bildschirm zum rechten Bildschirm bewegen und im zweiten Fall umgekehrt.
- Wenn alles wie erwartet funktioniert, fügen Sie das Skript zwei Verknüpfungskombinationen hinzu: Wählen Sie: Systemeinstellungen> "Tastatur"> "Verknüpfungen"> "Benutzerdefinierte Verknüpfungen". Klicken Sie auf das "+" und fügen Sie die Befehle wie oben erläutert hinzu.
Das Skript
#!/usr/bin/env python3
import subprocess
import sys
vec = sys.argv[1]
def get(cmd):
return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_shiftright(xr_output):
lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
return int([it for it in lines if "x" in it][0].split("x")[0])
def get_shiftleft(xr_output):
lines = [l for l in xr_output.splitlines() if "+0" in l and not "+0+0" in l][0].split()
return -int([it for it in lines if "x" in it][0].split("x")[0])
def shift_windows():
xr_output = get("xrandr")
shift_r = get_shiftright(xr_output)
shift_l = get_shiftleft(xr_output)
w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
for w in w_data:
props = get("xprop -id "+w[0])
if vec == "right":
check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
shift = shift_r
if vec == "left":
check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
shift = -shift_r
if check == 2:
command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()
3. Verschieben Sie ein einzelnes Fenster von einem Bildschirm auf einen anderen
Obwohl dies nicht buchstäblich Ihre Frage ist, können Sie mit nur wenigen Zeilen entweder alle Fenster von einem Bildschirm auf den anderen verschieben, aber auch ein einzelnes (das vorderste) mit einer Tastenkombination.
Mit dem folgenden Skript können Sie alle Fenster mit dem folgenden Befehl verschieben:
shift_windows right
oder verschieben Sie ein einzelnes Fenster mit dem Befehl:
shift_windows right s
Das Setup entspricht weitgehend dem obigen Skript (vergessen Sie nicht, es zu installieren wmctrl
).
Das Skript
#!/usr/bin/env python3
import subprocess
import sys
vec = sys.argv[1]
try:
n = sys.argv[2]
except IndexError:
n = "a"
def get(cmd):
return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_shiftright(xr_output):
lines = [l for l in xr_output.splitlines() if "+0+0" in l][0].split()
return int([it for it in lines if "x" in it][0].split("x")[0])
def get_shiftleft(xr_output):
lines = [l for l in xr_output.splitlines() if "+0" in l and not "+0+0" in l][0].split()
return -int([it for it in lines if "x" in it][0].split("x")[0])
def shift_windows():
xr_output = get("xrandr")
shift_r = get_shiftright(xr_output)
shift_l = get_shiftleft(xr_output)
w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
if n == "s":
frontmost = [l for l in get("xprop -root").splitlines() if "_NET_ACTIVE_WINDOW(WINDOW)" in l][0].split()[-1]
frontmost = frontmost[:2]+"0"+frontmost[2:]
w_data = [l for l in w_data if frontmost in l]
for w in w_data:
props = get("xprop -id "+w[0])
if vec == "right":
check = (0 < int(w[2]) < shift_r, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
shift = shift_r
if vec == "left":
check = (shift_r-shift_l > int(w[2]) >= shift_r , "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True)
shift = -shift_r
if check == 2:
command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), str(int(w[3])-28), w[4], w[5]])
subprocess.Popen(["/bin/bash", "-c", command])
shift_windows()