Angenommen, ich habe 2 Benutzerkonten user1
und user2
. Wenn ich mich als anmelde user1
und dann auf user2
using umschalte su
, kann ich Befehlszeilenprogramme ausführen, aber GUI-Programme schlagen fehl.
Beispiel:
user1@laptop:~$ su - user2
user2@laptop:~$ leafpad ~/somefile.txt
No protocol specified
leafpad: Cannot open display:
Wie kann ich eine GUI-Anwendung ausführen?
$XAUTHORITY
immer noch user1 gesetzt ist~/.Xauthority
, was das Programm vermutlich versucht zu lesen, und dass dies fehlschlägt, da diese Datei normalerweise den Modus 0600 (-rw-------
) hat, was bedeutet, dass sie nicht verfügbar ist zum Lesen durch irgendjemanden in der "anderen" Gruppe, zu der user2 gehört. Das heißt, wenn Siechmod o+r ~/.Xauthority
(als Benutzer1), haben Sie sich um dieses Problem gehackt. Ich habe ein Skript geschrieben , das dies demonstriert.Antworten:
su vs. su -
Wenn Sie ein anderer Benutzer werden, möchten Sie in der Regel verwenden
su - user2
. Der Bindestrich zwingt Benutzer2, eine Quelle.bash_profile
zu erhalten.xhost
Zusätzlich müssen Sie Benutzern Zugriff auf Ihr Display gewähren. Dies wird von X geregelt. Mit dem Befehl
xhost +
können Sie anderen Benutzern die Berechtigung erteilen, GUIs auf dem Desktop von Benutzer1 anzuzeigen.HINWEIS: Wenn
xhost +
Sie das Programm ausführen, möchten Sie es ausführen, während Sie sich noch in einer Shell befinden, die zu Benutzer1 gehört.$ DISPLAY
Wenn Sie Benutzer2 werden, müssen Sie möglicherweise die Umgebungsvariable festlegen
$DISPLAY
.quelle
xhost +user2
gibt mir noch diesen fehler -xhost: bad hostname "user2"
. Ich habe einige gegoogelt, und es scheint, als müsste ich etwas tun,xhost +user2@laptop
oder ich bin mirxhost +user2@localhost
nicht sicher, welche. Dann heißt esxhost +user2@localhost being added to access control list
.xhost
und dem Festlegen vonexport DISPLAY=:0.0
,leafpad
gibt mir das Ausführen immer nochNo protocol specified leafpad: Cannot open display:
und kann nicht ausgeführt werden. Ich habe diesen Link auf linuxquestions.org/questions/linux-newbie-8/… gefunden , der besagt, dass es einige magische Kekse gibt undxauth
. Haben Sie getestet, dass diese Dinge auch auf Ihrem Computer funktionieren? Vielleicht ist etwas mit meiner Konfiguration anders? Ich bin auf Debian + LXDE.xhost +
funktioniert und nichts anderes scheint nötig zu sein (keine Notwendigkeit einzustellen$DISPLAY
). Können Sie Ihre Antwort aktualisieren und ich akzeptiere sie?xhost
eine Liste im FormatSI:localuser:USERNAME
,xhost SI:localuser:user2
sollte also funktionieren. Ach ja und das Display des Benutzers kann mit gefunden werdenw
.xhost +
ermöglicht jedem Benutzer auf jedem Host, der eine Verbindung zu Ihrem X-Server herstellen kann, auf Ihren Bildschirm zuzugreifen.xhost +SI:localuser:user2
arbeitet für mich an Debian.Sie müssen die Authentifizierung von dem Token teilen user1 (unter der Annahme
~
Heimat ist user1 ):quelle
tee -a
, um das Überladen vorhandener Informationen in zu vermeiden.Xauthority
.Sie können die X11-Weiterleitung verwenden:
quelle
Sie können die App von einem anderen Benutzer starten. Ich starte die Gimp-App von Benutzer2 aus, während ich mit Benutzer 1 angemeldet bin (GUI):
(Pass eingeben)
Genießen :)
quelle
export DISPLAY
zuerst, wie die akzeptierte Antwort sagt)$ xhost -
Sie können den Befehl sux versuchen:
sux wird das $ DISPLAY-Zeug für Sie erledigen. Möglicherweise müssen Sie es installieren mit:
unter Debian / Ubuntu.
quelle
sux
wird nicht mehr von Debian oder Ubuntu ausgeliefert. Die beste Alternative, die ich finden konnte, ist das Hinzufügenxhost SI:localuser:root
(oder welcher Benutzer auch immer)~/.xprofile
, um es dauerhaft zuzulassen oder zu verwendenrunuser
gksu
/gksudo
alternative, die gut funktionierten. Während es sich noch in Sid befindet, wird es aus Sicherheitsgründen in Buster entfernt.Alternativ dazu
sux
können Sie den grafischen Befehl (firefox-esr
im folgenden Beispiel) sicher ausführen als$AUTHUSER
(guest
im folgenden Beispiel):der Code macht:
guest
Benutzer den Zugriff auf Ihren aktuellen Benutzer$DISPLAY
überxhost +SI:localuser:guest
ssh-askpass
Sie grafisch für Passwort fragen (natürlich könnten Siesudoers(5)
NOPASSWD:
dies vermeiden, wenn Sie Ihre Sicherheitspolitik denkt , dass es in Ordnung ist. Oder könnten Sie andere verwendenaskpass
Programme, oder sie in Konfigurationsdateien (siehe angebensudo(8)
Einzelheiten über--askpass
)sudoers(5)
), wird der Befehl/usr/bin/firefox-esr
als anderer Benutzer ausgeführt (guest
).guest
Zugriffsberechtigungen für andere Benutzer ( )$DISPLAY
über widerrufenxhost -SI:localuser:guest
sudo -K
Entfernt schließlich das zwischengespeicherte Passwort. Beim nächsten Aufruf vonssh-askpass
werden Sie erneut nach dem Passwort gefragt (anstatt das zwischengespeicherte Passwort zu verwenden).Es ist zwar wenig mehr Arbeit als das, was
gksu(8)
oder was essux(8)
getan hat, aber es kann als Skript geschrieben werden und es ist viel sicherer als:xhost +
(Jeder Benutzer hat Zugriff auf Ihre grafische Anzeige, solange diese in Kraft ist.)gksu
/sux
tat (temporäre Kopie von~/.Xauthority
, die es dem angegebenen Benutzer ermöglichteMIT-MAGIC-COOKIE-1
, Ihr Display zu kopieren und weiter zu verwenden, auch nachdem gksu / sux beendet wurde (solange Sie das Gerät nicht heruntergefahren oder sich vom Display abgemeldet haben - Bildschirmschoner, Ruhezustand usw. haben die Magie nicht verändert Plätzchen).da nur ein lokaler Benutzer auf Ihre Anzeige zugreifen kann und nur solange der Befehl ausgeführt wird (wenn der Befehl beendet ist,
$AUTHUSER
kann er in keiner Weise mehr auf Ihre Anzeige zugreifen).Eine weitere sichere Alternative ist
ssh -X
(ohne-Y
die eigentlich macht Sie weniger sicher! SehenForwardX11Trusted
inssh_config(5)
für Details), so ist einfacher zu benutzen , wenn Sie es nicht scripting, aber es induziert additinal Overhead (zB. Es ist langsamer) und einige Programme möglicherweise nicht korrekt funktionieren ohne unsicher-Y
.quelle
Sie müssen die Installationsoberfläche als Benutzer2 laden .
Versuchen Sie dies zu befolgen:
Melden Sie sich als root an :
Testen Sie den x-Server:
Wenn Sie eine laufende Uhr sehen können, ist das eine gute Idee. Versuchen Sie nun Folgendes:
Das Ergebnis sollte so aussehen:
Lassen Sie jetzt user2 auf xhost zugreifen
Versuchen Sie nun erneut, sich bei Benutzer2 anzumelden und ein beliebiges GUI-Programm zu öffnen.
quelle
sudo su
. Verwenden Siesudo
odersu
; wähle eins. (3) Die Frage bezieht sich aufuser1
unduser2
. Bitte schreiben Sie Ihre Antwort in Bezug aufuser1
unduser2
. (Tue oder tue nicht; es gibt keintri
.) (4) Ihre Antwort wäre besser, wenn sie eine Erklärung von enthalten würdeSI:localuser
. ………………… Bitte antworten Sie nicht in Kommentaren; Bearbeiten Sie Ihre Antwort, um sie klarer und vollständiger zu gestalten.