Der Befehl zum Ausführen als root beim Booten funktioniert nicht

1721
GarouDan

Ich muss den folgenden Befehl sudo xhost SI:localuser:rootjedes Mal ausführen, wenn ich eine Maschine von mir starte. Also möchte ich diesen Prozess automatisieren. Ich verwende dafür Ubuntu 12.04 LTS.

Ich habe versucht, diesen Befehl auf meiner Datei setzen, /etc/rc.localaber es funktioniert nicht, weil, wenn ich laufe xhosterscheinen soll:

SI:localuser:<myUser> SI:localuser:root 

Die Datei /etc/rc.localist folgende:

#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing.  xhost SI:localuser:root  exit 0 

Fehlt mir etwas?

* PS .: wie auf die Kommentare vorschlagen ** Das, was ich zu tun habe binden auf diese Frage beschrieben hier . Kann ich das besser machen?

1
Ist das das _entire_ `/ etc / rc.local`? Sie haben keine Shebang-Linie? terdon vor 11 Jahren 0
Ich werde die komplette Datei ablegen GarouDan vor 11 Jahren 0
Ich denke, das müsste vielleicht auf [Ask Ubuntu] (http://www.askubuntu.com) gestellt werden ... horIzoN vor 11 Jahren 0
Warum müssen Sie der Zugriffsliste "root" hinzufügen? grawity vor 11 Jahren 0
@ nerof61 Linux-Fragen sind hier willkommen. Vor allem, wenn Grawity sie bemerkt hat :). terdon vor 11 Jahren 0
Ich weiß, ich denke nur, er würde direkte Antworten von den Profis von Ask Ubuntu bekommen. horIzoN vor 11 Jahren 0
Nun, sieht aus wie eine Superuser-Frage für mich, aber ich werde einige Zeit warten, nachdem ich es zu AskUbuntu migriert habe. GarouDan vor 11 Jahren 0
@grawity, ich muss einen cron als root ausführen und dieser cron (nach anderen sachen) sollte Firefox öffnen. Das Problem besteht darin, dass Sie beim Öffnen des Firefox abstürzen. GarouDan vor 11 Jahren 0
Nein, das Problem ist, dass Sie versuchen, Firefox als root auszuführen. grawity vor 11 Jahren 1
Warum muss ein Cron-Job einen grafischen Webbrowser als 'root'-Benutzer öffnen? Dies klingt immer mehr nach einem [XY-Problem] (http://meta.stackexchange.com/q/66377/203101). Was genau willst du hier machen? terdon vor 11 Jahren 2
@terdon, ich denke, es ist ein guter Zeitpunkt, um eine weitere Frage zu schreiben und zu sagen, was ich wirklich zu tun versuche GarouDan vor 11 Jahren 0

2 Antworten auf die Frage

2
grawity

Es wird nicht funktionieren, weil:

  1. rc.local wird ausgeführt, bevor der X11-Server gestartet wird.

  2. rc.local weiß nicht, wo sich der X11-Server befindet. Mit anderen Worten, es kennt nicht den richtigen Wert für $ DISPLAY.

    Denken Sie immer daran, dass es mehrere X11-Server geben kann - Ubuntu unterstützt die "schnelle Benutzerumschaltung", so dass Sie möglicherweise eine Xorg-Instanz und eine zweite für den Anmeldebildschirm haben.

  3. rc.local hat keinen Zugriff auf einen der aktuell laufenden X11-Server.

    Denken Sie darüber nach: Wenn Sie den Zugriff auf root mithilfe von root angeben müssen xhost, bedeutet dies, dass root noch keinen Zugriff hat. Und rc.local läuft als root.

Alle drei Punkte gelten auch für Cronjobs, für udev-Regeln und für die meisten anderen Dinge.

Interessant. Nun, ich brauche das, weil mein Cron als root laufen sollte. Kann ich über eine Lösung nachdenken, diesen Befehl als root auszuführen, nachdem ich ein X habe? GarouDan vor 11 Jahren 0
Schwerkraft, ich habe eine andere Frage gestellt und erklärt, was ich wirklich tue. Bitte schau mich an. Ich schätze die hilfe Vielen Dank GarouDan vor 11 Jahren 0
2
terdon

Wie @grawity sehr richtig feststellt, funktioniert das nicht. Wenn Sie dies wirklich tun möchten (was eine ziemlich schlechte Idee ist), erstellen Sie eine ~/.xinitrcDatei mit diesen Zeilen:

#!/usr/bin/env bash xhost SI:localuser:root 

Der xhostBefehl muss nicht als ausgeführt werden, rootda Sie der Besitzer der X-Sitzung sind. Nun, es xinitrcist ziemlich alt und ich bin nicht sicher, ob es von modernen Desktop-Umgebungen gelesen wird. Sie können wahrscheinlich dasselbe erreichen, indem Sie Ihre GNOME-Sitzungseigenschaften anpassen.

Die Aktivierung des Root-Zugriffs auf Ihren X-Server ist in der Regel keine gute Idee. Jedes Mal, wenn Sie root benötigen, um ein grafisches Programm auszuführen, können Sie die Zugriffskontrolle deaktivieren:

xhost +  sudo gedit xhost - 

Ich bin mir ziemlich sicher, dass Sie dies auf den meisten modernen Systemen nicht tun müssen. Was genau versuchst du zu tun? Mit aufgerufene Programme sudosollten trotzdem Zugriff auf Ihren X-Server haben.

Die meisten Display-Manager lesen (Quelle) `~ / .xprofile` aus ihren Xsession-Skripten - ich weiß, dass GDM, KDM und LightDM dies tun. Aber ich habe das Gefühl, dass OP versucht, etwas * auf dem Anmeldebildschirm auszuführen * ... grawity vor 11 Jahren 0
IMHO ist das Deaktivieren der Zugriffskontrolle jedoch eine viel schlechtere Idee als den Zugriff auf root. Denken Sie darüber nach: Mit `xhost +` geben Sie anderen Benutzern Zugriff auf root * und *. (Und möglicherweise sogar an alle über das Netzwerk, wenn Xorg nicht mit -nolisten tcp gestartet wurde.) grawity vor 11 Jahren 0
@grawity yeah, aus diesem Grund habe ich `xhost -` direkt danach hinzugefügt :). terdon vor 11 Jahren 0
@terdon, auch sehr interessant. Oh, vielleicht kann ich das versuchen. Ich benutze dies nur, weil mein cron beim Öffnen des Firefox abstürzt. Mit `sudo xhost SI: local user: root` hatte ich das gelöst. Ich werde versuchen, wieder aufzufüllen und zurückzukehren. GarouDan vor 11 Jahren 0
@terdon: Ich habe es gemerkt, aber es ist immer noch nicht besser als `xhost + SI: localuser: root; Sudo Gedit; xhost -SI: localuser: root` ... grawity vor 11 Jahren 0
@GarouDan Wie Grawity sagte, es unterscheidet sich nicht wirklich von dem, was Sie tun. Wir vermuten, dass es eine bessere Möglichkeit gibt, das zu tun, was Sie tun möchten, aber Sie haben nicht erklärt, was Sie versuchen, also können wir Ihnen nicht die richtige Antwort geben. Siehe [XY-Problem] (http://meta.stackexchange.com/q/66377/203101). terdon vor 11 Jahren 1
Ich habe versucht, "host +" und "host-" in das Skript zu setzen, das von meinem Cron ausgeführt wurde, aber es hat nicht funktioniert. Ich werde eine Frage öffnen, in der steht, was ich versuche zu tun ... GarouDan vor 11 Jahren 0
Terdon, bitte sehen Sie die Frage, die ich mit dieser verlinkt habe. Ich schätze die Hilfe. Vielen Dank. GarouDan vor 11 Jahren 0