Bash Script meldet Fehler: "Can't open X display."

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
apulix
Beiträge: 132
Registriert: 19.09.2004 19:37:24
Kontaktdaten:

Bash Script meldet Fehler: "Can't open X display."

Beitrag von apulix » 26.08.2006 13:36:34

Hallo,

ich versuche gerade ein Skript zu schreiben, das regelmäßig ein Screenshot macht, dazu verwende ich das Programm scrot. Nun habe ich festgestellt, dass es wunderbar läuft, wenn es der Benutzer selbst startet, sobald ich es aber als daemon laufen lasse, kommt da der folgende Fehler:

Code: Alles auswählen

Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
giblib error: Can't open X display. It *is* running, yeah?
Natürlich kommt der Fehler auch dann, wenn ich das Skript einfach von einem anderen User oder aus der Konsole heraus starte. Es funktioniert also nur wenn der Benutzer, der die grafische Oberfläche laufen hat, aus dieser heraus das Skript startet. Kann mir jmd. einen Tipp geben, wie ich das Problem lösen kann? Das Skript kann gerne mit root-Rechten laufen, das ist hier nicht kritisch.

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von catdog2 » 26.08.2006 13:56:04

Per default kann nur der user auf ein x-display zugreifen, der es gestartet hat.

Das kannst du mit xohst ändern.
xhost local:<username> <-- erlaubt es nur einem betimmten lokalen user
xhost + <-- erlaubt es allen.
Unix is user-friendly; it's just picky about who its friends are.

apulix
Beiträge: 132
Registriert: 19.09.2004 19:37:24
Kontaktdaten:

xhost: unable to open display ":0.0"

Beitrag von apulix » 26.08.2006 14:48:56

catdog2 hat geschrieben:Das kannst du mit xhost ändern.
Okay, bei mir meldet xhost aber wenn ich "xhost +" ausführe:

Code: Alles auswählen

xhost:  unable to open display ":0.0"
Muss ich noch irgendwo einen Server starten oder eine Einstellung ändern?

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 26.08.2006 14:58:12

hi,

bist du dir auch sicher, das du das Kommando nicht als root oder anderer user ausgeführt hast ? Du musst es mit dem User ausführen, mit dem du auch X startest.
mfg
mauser

apulix
Beiträge: 132
Registriert: 19.09.2004 19:37:24
Kontaktdaten:

xhost als anderer Benutzer ausführen

Beitrag von apulix » 26.08.2006 15:05:49

mauser hat geschrieben:bist du dir auch sicher, das du das Kommando nicht als root oder anderer user ausgeführt hast ?
Mein Fehler! Hab' stillschweigend angenommen, dass es root machen muss.

Aber was ist jetzt, wenn das Installationsskript als root läuft, dann wird "xhost +" zwangsläufig nicht funktionieren. Wie kann ich das lösen, ohne mich als anderer Benutzer anzumelden?

Wenn ich nämlich folgendes einfaches Skript habe:

Code: Alles auswählen

echo "eins"; su testuser; echo "zwei";
Dann werden die Befehle nach "su ..." nicht mehr ausgeführt, oder zumindest nicht als "testuser".

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 26.08.2006 15:11:14

hi,

schau dir mal "sudo" an.
mfg
mauser

apulix
Beiträge: 132
Registriert: 19.09.2004 19:37:24
Kontaktdaten:

hm

Beitrag von apulix » 26.08.2006 15:40:47

Vermutlich gehe ich jetzt langsam auf die Nerven, aber ich krieg' das irgendwie nicht hin:
root# sudo -u testuser xhost +
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
xhost: unable to open display ":0.0"
Mit dem sudo-Befehl ist aber alles in Ordnung, oder? Jedenfalls hat davor das Gleiche mit "xhost -" wunderbar funktioniert, jetzt kriegt root aber keinen Zugriff mehr drauf.

Vielen Dank für die Hilfe!

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 26.08.2006 15:56:32

hi,

probier vll. mal

Code: Alles auswählen

sudo -u testuser 'xhost +' 
mfg
mauser

apulix
Beiträge: 132
Registriert: 19.09.2004 19:37:24
Kontaktdaten:

nope

Beitrag von apulix » 26.08.2006 15:58:46

mauser hat geschrieben:

Code: Alles auswählen

sudo -u testuser 'xhost +' 
Das hab' ich auch schon versucht, zwar mit " statt ', aber das ist egal:

Code: Alles auswählen

root# sudo -u testuser 'xhost +'
sudo: xhost +: command not found

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 26.08.2006 16:01:41

hi,

wie du siehst geht das bei mir:

Code: Alles auswählen

sebastian@straylight:~$ su
Password:
straylight:/home/sebastian# sudo -u sebastian xhost +
access control disabled, clients can connect from any host

apulix
Beiträge: 132
Registriert: 19.09.2004 19:37:24
Kontaktdaten:

merkwürdig

Beitrag von apulix » 26.08.2006 16:10:14

Ja, merkwürdig. Vll. findet sich noch jmd., der einen Rat weiß.

Antworten