Ich habe ein Python3-Skript, das das Gtk
-Modul verwendet (importiert von gi.repository
, für die Recent-Manager-Funktionalität) und einen Link zur aktuellen XServer-Sitzung ( lightdm
Dienst in Ubuntu) erfordert.
Das manuelle Ausführen über die Konsole (in einer XServer-Sitzung) funktioniert, aber ich möchte, dass es automatisch ausgeführt wird.
Ein init.d-Skript funktioniert nicht (die Variable DISPLAY auf 0,0 setzen). Die Verwendung von xvfb-run
init.d hat dazu geführt, dass mein Skript ausgeführt wurde, aber wie erwartet in einer virtuellen Xserver-Umgebung (nicht meiner). Gibt es kein Äquivalent, das ein init.d-Skript mit der aktuellen Xserver-Sitzung verbindet?
Bisher habe ich versucht, eine .xinitrc
Datei (in ~/
, ja, sie ist ausführbar) zu erstellen, .xprofile, .xsession, .xsessionrc
die alle über auf die erste verweisen ln -s
. Ich habe versucht, gnome-terminal &
zum Testen hinzuzufügen, aber das Terminal wurde auch nicht angezeigt, weder nach einem Neustart noch nach einem Neustart lightdm
des gesamten PCs und erneuter Anmeldung.
Ich habe auch versuchtFühren Sie das Konfigurationsskript bei der Wiederaufnahme der X-Sitzung aus, aber das gibt den Fehler Can't open /usr/share/acpi-support/power-funcs
.
Verwenden Sie upstart
, wie vorgeschlagen vonFühren Sie ein Startskript mit lightdm auswürde auch nicht die XServer-Anzeigevariable (oder den Handle?) bereitstellen, sondern sie einfach nach lightdm
dem Start ausführen, richtig?
Vielleicht irgendwo reinstellen xorg.conf
? (Wie kann ich die Xrandr-Anpassung dauerhaft machen?) Schlägt mich..
(Mein Skript erstellt Schnelllisten der zuletzt verwendeten Dateien und fügt sie den Rechtsklickmenüs des Unity Launchers hinzu, ähnlich wie bei Windows:https://github.com/thirschbuechler/ubuntu-recentquicklists)
Antwort1
Wie in vielen Fällen ist auch hier das Timing das Hauptproblem.
- Ihr Skript muss auf Benutzerebene ausgeführt werdennach dem Einloggen, da es Launcher-Elemente bearbeitet, und zwar auf Benutzerebene.
- Selbst wenn man sich ansieht, was das Skript tun soll (wenn man Ihre Erklärung liest), muss das Skript ein wenig warten, bis der Desktop vollständig geladen ist; der Unity Launcher ist nicht das Erste, was nach der Anmeldung „bereit“ ist. Wenn das Skript zu früh ausgeführt wird, bricht es entweder ab oder verfehlt sein Ziel.
Zusamenfassend
Sie müssen das Skript ca. 10–15 Sekunden nach der Anmeldung ausführen. Dies können Sie durch Hinzufügen von Folgendem erreichen:
/bin/bash -c "sleep 15 && python /path/to/script.py"
(wenn das Skript nicht ausführbar ist) oder
/bin/bash -c "sleep 15 && /path/to/script.py"
(wenn das SkriptIstausführbare Datei) zu den Startanwendungen des Benutzers hinzu: Dash > Startanwendungen > Hinzufügen.
Führen Sie es aus fürAlle Nutzer
Wenn Sie das Skript ausführen müssenfür alle Benutzer(nach der Anmeldung) Sie können es für alle Benutzer gleichzeitig zu den Startanwendungen hinzufügen.
Kopieren Sie dazu den untenstehenden Code in eine leere Datei, bearbeiten Sie die Zeilen ab Name=
und geben Sie in der Zeile den richtigen Pfad zum Skript ein:
Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"
Speichern Sie die Datei dann /etc/xdg/autostart
unter launch_script.desktop
(oder unter einem beliebigen anderen Namen, solange sie mit endet .desktop
).
[Desktop Entry]
Name=Name
Exec=/bin/bash -c "sleep 15 && python /path/to/script.py"
Type=Application