Ich versuche, einen alternativen Benutzer (Nicht-Administrator) zum Ausführen von Grafiksoftware auf meinem System zu verwenden. Dieser alternative Benutzer wurde benannt und mit einer UID und einer GID versehen, die einem gleichnamigen Remote-Systembenutzer entsprechen. Die UID ist 500, daher glaube ich, dass der Benutzer ein Benutzer ist, der sich nicht anmeldet.
Ausgehend von Ubuntu, das in meinem Hauptkonto angemeldet ist, öffne ich ein Terminal und wende mich su
an den alternativen Benutzer. Ich versuche dann, den Befehl auszuführen, um die Anwendung zu starten und "Kein Protokoll angegeben" zu erhalten.
Liegt das an der UID <1000, am su
oder am Nichtadministrator des Benutzers? Wie kann ich diesen Benutzer dazu bringen, die Anwendung mit einer GUI auszuführen?
quelle
xauth list >/tmp/xa.$$; su - <otheruser> -c "unset XAUTHORITY; xargs xauth add </tmp/xa.$$"; rm -f /tmp/xa.$$
aber seien Sie sich bewusst, dass dort ein schrecklicher Rennzustand herrscht.su
nach einem Passwort fragen möchten . Probieren Sie diesen neuen Befehl aus.Ich mein Fall der neue Display-Server
wayland
war das Problem,Tun Sie dies einfach,
xhost + local:
dann dürfen andere Benutzer (z. B. root) Programme in Ihrer Sitzung ausführen. Netzwerkverbindungen sind jedoch nicht zulässig.Wenn Sie Clients von einem beliebigen Host zulassen möchten , können Sie sie verwenden,
xhost +
ohne überhaupt einen Host anzugeben. Dies ist jedoch unsicher . Es ist besser, nur die Hosts anzugeben, für die Sie Zugriff auf Ihre Sitzung gewähren möchten.quelle
xhost +
war ausreichend genugAngenommen, Sie möchten mit Gewalt eine Verbindung zu X herstellen ...
Nehmen wir an, Sie führen Ihre Befehle bereits auf dem Server aus (auf dem X ausgeführt wird), andernfalls lassen Sie dies zuerst funktionieren und verwenden anschließend 'ssh -X user @ server' vom Client.
Es gibt möglicherweise mehrere Möglichkeiten, die xauth-Befehle auszuführen. Sie verwenden beispielsweise möglicherweise 'sudo', dabei können jedoch Umgebungsvariablen verloren gehen oder geändert werden. Die folgenden Umgebungsvariablen müssen beibehalten werden: DISPLAY und XAUTHORITY. Um zu testen, ob dies der Fall ist, können Sie 'echo $ XAUTHORITY' auf die gleiche Weise wie Ihre Befehle ausführen, aber stellen Sie sicher, dass Sie die Umgebungsvariablen nicht erweitern, bevor Sie diese Befehle ausführen. Versuchen Sie zum Beispiel: sudo bash -c 'echo "$ XAUTHORITY"', um zu sehen, was XAUTHORITY wirklich ist, nachdem Sie Ihr sudo ausgeführt haben (wenn es verschwindet, müssen Sie möglicherweise etwas zu Ihrer sudoers-Datei hinzufügen, siehe an anderer Stelle).
Führen Sie schließlich den folgenden Befehl als den Benutzer auf dem Server aus, mit dem Sie Zugriff erhalten möchten:
xauth info
Dies zeigt die 'Authority-Datei' an, die verwendet wird (/root/.Xauthority standardmäßig für root oder so ähnlich wie /home/theuser/.Xauthority). Wenn die richtige .Xauthority-Datei angezeigt wird, müssen Sie sich keine Gedanken über die Umgebungsvariable XAUTHORITY machen (eigentlich würde ich nicht wissen, wann dies nicht der Fall ist, es sei denn, Sie möchten einen nicht standardmäßigen Speicherort dieser Datei bearbeiten ).
Entfernen Sie diese Datei (falls vorhanden):
rm /root/.Xauthority
Ersetzen Sie
/root/.Xauthority
durch die richtige XAUTHORITY-Datei für Ihren Fall.Erstellen Sie es neu, aber leer (dies wird für viele Befehle benötigt):
touch /root/.Xauthority
Zu diesem Zeitpunkt wird der Fehler " Kein Protokoll angegeben" angezeigt, auch wenn Sie zuvor " Ungültiges MIT-MAGIC-COOKIE-1" erhalten haben. Suchen Sie die Berechtigungsdatei, die der X-Server derzeit verwendet:
ps aux | grep Xorg
Dies sollte ungefähr so aussehen:
root 1153 0.0 1.0 149560 44464 tty7 Ss+ dec02 0:00 /usr/lib/xorg/Xorg -nolisten tcp -auth /var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711} -background none -noreset -displayfd 17 vt7
Der Dateiname danach
-auth
ist der Name, den Sie im nächsten Befehl benötigen. Führen Sie dies als root aus:sudo xauth -f '/var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711}' list
Das listet einen 32-stelligen Hexadezimalschlüssel auf. Die Ausgabe könnte beispielsweise sein:
hostname/unix:0 MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7
Verwenden Sie dies, um Ihre .Xauthority-Datei zu generieren (als Benutzer, der sich erneut anmelden muss):
xauth add $DISPLAY MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7
Ersetzen Sie 'c0eaf749aa252101a0f57d5087089db7' durch das, was vom Befehl list für Sie zurückgegeben wurde. Jetzt sollte Ihre .Xauthority 51 Byte groß sein und Sie können (wieder) eine Verbindung zum X-Server herstellen.
quelle
Versuchen Sie so etwas
Quelle
Ps : die akzeptierte antwort hat bei mir nicht funktioniert
quelle
Ich hatte den Fehler "Kein Protokoll angegeben", als ich eine Instanz von Selenium 3.3.1 über ein Startskript startete und dann den Chrome-Treiber in Selenium verwendete. Selenium wurde als derselbe Benutzer wie X11 ausgeführt und die Umgebungsvariable DISPLAY-Shell wurde korrekt festgelegt. Interessant ist, dass dieser Fehler nicht aufgetreten ist, als ich den Firefox-Treiber verwendet habe. Das Festlegen der XAUTHORITY-Shell-Umgebungsvariablen im Upstart-Skript, die auf den Wert von $ XAUTHORITY des aktiven X11-Benutzers verweisen, hat den Fehler für den Chrome-Treiber behoben.
Nebenbei bemerkt, der Fehler "Kein Protokoll angegeben" wurde vom Chrome / Chrome-Treiber gründlich vergraben und war keineswegs leicht zu finden. Ich bemerkte, dass Chrome weiterhin Verzeichnisse im Muster von erstellte
/tmp/.org.chromium.Chromium.*
, diese jedoch schnell verschwanden. Mir ist aufgefallen, dass sie eine Datei mitchrome_debug.log
der Meldung "Kann Anzeige nicht öffnen" enthielten . Ich fand das ziemlich seltsam, da ich verifiziert habe, dass der Selenprozess das richtige DISPLAY enthält,/proc/$pid/environ
und die Ausgabe des Selenprozessesstrace
gründlicher untersuchte, was ergab, dass "kein Protokoll angegeben", was mich schließlich zu dieser Frage führte.Dieser Fehler kann reproduziert werden, indem XAUTHORITY deaktiviert und versucht wird, einen X11-Client auszuführen. Beispielsweise:
quelle
Das war einfach. Das Problem tritt auf, wenn Sie in root sate sind und wollen das nutzen gksu einfach verlassen den Wurzelzustand und versuchen Sie es erneut
quelle
Geben Sie dies einfach in Ihr Terminal ein
xhost +SI:localuser:root
,export DISPLAY=:0.0
und versuchen Sie es erneutquelle
Anhand der Hinweise in den akzeptierten Antworten konnte ich das Problem anders lösen:
In Code:
quelle
Nehmen wir an, Sie versuchen, als Benutzer2 ( normaler Benutzer ) auf die Benutzeroberfläche zuzugreifen . Anschließend müssen Sie 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