Ich habe ein benutzerdefiniertes xrandr-Skript, das meine externen Monitore aktiviert und den Monitor meines Laptops deaktiviert. Wenn ich meinen externen Monitor trenne, kann ich den Monitor nicht aktivieren, da mein Bildschirm leer ist.
Ich würde gerne auf mein Konsolen-TTY zugreifen können (Strg-Alt-F1) und xrandr auslösen, um fortzufahren (z. B. xrandr --output eDP1 --auto
). Wenn ich das auf meinem TTY ausführe, wird „Anzeige kann nicht geöffnet werden“ angezeigt. Irgendwelche Tipps, wie ich das machen kann?
Antwort1
Sie müssen nicht in die Konsole gehen. Sie können dasselbe erreichen, indem Sie eine benutzerdefinierte Tastenkombination hinzufügen, um Ihren internen Bildschirm wieder zu aktivieren.
Wählen Sie „Systemeinstellungen“ > „Tastatur“ > „Kurzbefehle“ > „Benutzerdefinierte Kurzbefehle“, klicken Sie auf das „+“ und fügen Sie den Befehl einem Kurzbefehl Ihrer Wahl hinzu:
xrandr --output <screenname> --auto
Habe es gerade auf meinem System (Laptop, 15.10) getestet; habe meinen Bildschirm ausgeschaltet und ihn mit der Tastenkombination, durch Ausführen des Befehls, erfolgreich wieder aktiviert :)
Alternative
Sie können eine bearbeitete Version vondieses SkriptDie folgende Version (kleines Hintergrundskript, prüft alle vier Sekunden, ob ein externer Bildschirm angeschlossen ist) stellt sicher, dass Ihr interner Bildschirm eingeschaltet ist
#!/usr/bin/env python3
import subprocess
import time
# --- set your internal screen below (the example is my primary screen)
internal = "DVI-I-1"
#---
# don't change anything below
scr_info1 = 0
while True:
time.sleep(4)
# read the current screen setup from xrandr
get_screens = subprocess.check_output("xrandr").decode("utf-8").splitlines()
scr_data = [l for l in get_screens if " connected " in l]
# count the number of connected screens
scr_info2 = len(scr_data)
# if the number of connected screens changes,
# switch off the internal one if there are two screens
if scr_info2 != scr_info1:
if scr_info2 == 2:
ext = [s.split()[0] for s in scr_data if not internal in s][0]
subprocess.Popen(["xrandr", "--output", internal, "--off", "--output", ext, "--auto"])
else:
subprocess.Popen(["xrandr", "--output", internal, "--auto"])
scr_info1 = scr_info2
Wie stellt man das ein
- Kopieren Sie das obige Skript in eine leere Datei und speichern Sie es unter
switch_screens.py
- Geben Sie im Kopfbereich Ihres Skripts den Namen IhresinternBildschirm. Um das herauszufinden, öffnen Sie ein Terminalfenster und führen Sie den Befehl aus
xrandr
(kein externer Bildschirm angeschlossen). Die Zeile mit „verbunden“ zeigt den Namen Ihres Bildschirms in der ersten Zeichenfolge und sieht so aus:VGA-1
oder so ähnlich. Führen Sie einen Testlauf durch, indem Sie ein Terminalfenster öffnen und den folgenden Befehl eingeben:
python3 /path/to/switch_screens.py
Während das Skript ausgeführt wird, verbinden Sie Ihren externen Bildschirm, warten Sie, bis Ihr interner Bildschirm ausgeschaltet wird, und trennen Sie die Verbindung erneut.
Wenn alles gut funktioniert, fügen Sie den folgenden Befehl zu den Startanwendungen hinzu: Öffnen Sie Dash > Startanwendungen > Hinzufügen. Fügen Sie den Befehl hinzu:
/bin/bash -c "sleep 15 && python3 /path/to/switch_screens.py"
Melden Sie sich ab und wieder an. Jetzt wird Ihr interner Bildschirm automatisch ausgeschaltet, wenn ein externer Bildschirm angeschlossen ist, und wieder aktiviert, wenn Sie die Verbindung trennen.
Das Skript belastet Ihr System in keiner Weise merklich.