startx
kann einen neuen X-Server in einem neuen virtuellen Terminal erstellen. Aber auch wenn ich es im Hintergrund laufen lasse, d. h. sudo startx &
, wechselt es trotzdem automatisch zum neuen virtuellen Terminal. Ist es möglich, ein neues virtuelles Terminal zu erstellen und dabei im alten zu bleiben?
Und wie kann ich den Dateinamen des neuen Terminals herausfinden? (Bisher konnte ich tty
im neuen Fenster nachsehen, aber wie kann ich dasselbe im alten erreichen?)
Antwort1
Vorausgesetzt, Sie verwenden X.org, scheint dies nicht möglich zu sein. Der X-Server unterstützt eineMöglichkeitaufgerufen -novtswitch
, aber das gilt nur, wenn der X-Server beendet wird, nicht, wenn er gestartet wird. Angesichts der Diskussion inFedora-Fehler #246267, es scheint, dass diese Option auch beim Start angewendet wurde, sie wurde jedoch entfernt, da sie auf vielen Hardwarekomponenten zum Absturz des X-Servers führte: Der X-Server muss beim Start auf die Videohardware zugreifen.
Die nächstbeste Lösung wäre, ein kurzes Flackern zu einem anderen VT zuzulassen und dann wieder zurückzuschalten. Unter Linux können Sieopenvt
einen Befehl in einem neuen virtuellen Terminal auszuführen undchvt
um es wieder zu ändern.
Erstellen Sie ein Skript ~/.xinitrc.chvt
mit
#!/bin/sh
echo "New X session running on vt$X_FGCONSOLE" >"$ORIGINAL_TTY"
chvt "$ORIGINAL_FGCONSOLE"
exec ~/.xinitrc
und Renn
ORIGINAL_FGCONSOLE=$(fgconsole) ORIGINAL_TTY=$(tty) openvt -s -- sh -c 'export X_FGCONSOLE=$(fgconsole); startx ~/.xinitrc.chvt -- vt$X_FGCONSOLE'
~/.xinitrc.chvt
( Im Gegensatz zu ist das separate Skript sh -c …
erforderlich, da startx
es Argumente mit Platzhaltern durcheinander bringt und Sie aufgrund einer weiteren Eigenart von startx den absoluten Pfad übergeben müssen. Alternativ können Sie es direkt aufrufen und selbst xinit
einrichten .)XAUTHORITY
Je nachdem, wo Sie dieses Skript ausführen, haben Sie möglicherweise keine Berechtigung zum Ausführen fgconsole
(„Es konnte kein Dateideskriptor mit Bezug auf die Konsole abgerufen werden“), da es geöffnet werden muss /dev/console
und dies nicht möglich ist, wenn es einem anderen Benutzer (in der Praxis root) gehört. Ich weiß nicht, wie ich sonst herausfinden kann, wie ich zur ursprünglichen Konsole zurückkehren kann. Eine Lösung, wenn Sie Root-Zugriff haben, wäre, ORIGINAL_FGCONSOLE=$(fgconsole) …
durch zu ersetzen
ORIGINAL_FGCONSOLE=$(sudo fgconsole)
und erteilen Sie Ihrem Konto die Berechtigung, fgconsole
als Root ausgeführt zu werden, indem Sie visudo
die Zeile ausführen und hinzufügen
zzy ALL = (root) NOPASSWD: /bin/fgconsole
nach jeder anderen Zeile, die für Ihr Konto gilt. Es ist sicher, sofern kein Programmfehler vorliegt fgconsole
.
¹ Wenn Sie Linux verwenden, verwenden Sie X.org, und wenn Sie Linux nicht verwenden, besteht immer noch eine gute Chance, dass Sie X.org verwenden.