Starten Sie eine Anwendung beim Start

753
Harton

Aufgabe:

Starten Sie xfce4-clipman beim Start

Versucht:

Ich habe an der richtigen Stelle ein Sh-Skript mit den richtigen Berechtigungen erstellt:

martin@martin:/etc/init.d$ ls -l start_clipman.sh  -rwxrwxr-x 1 root root 26 мар 12 09:05 start_clipman.sh 

Inhalt der SH-Datei:

martin@martin:/etc/init.d$ cat start_clipman.sh  #!/bin/bash xfce4-clipman martin@martin:/etc/init.d$  

Ich bin gerannt

martin@martin:/etc/init.d$ sudo update-rc.d start_clipman.sh  defaultsinsserv: warning: script 'K01mount_disk.sh' missing LSB tags and overrides insserv: warning: script 'K01start_clipman.sh' missing LSB tags and overrides insserv: warning: script 'start_clipman.sh' missing LSB tags and overrides insserv: warning: script 'mount_disk.sh' missing LSB tags and overrides 

Potenzielles Problem:

Wenn ich das mache:

martin@martin:~$ xfce4-clipman 

Die Anwendung läuft, aber xfce-clipman belegt das Terminal, es wird ausgeführt, es funktioniert, aber wenn ich das Terminal verwenden möchte, um etwas anderes einzugeben, muss ich es abbrechen.

martin@martin:~$ xfce4-clipman ^C martin@martin:~$  

Was mache ich

0

1 Antwort auf die Frage

1
grawity

xfce4-clipman erfordert Zugriff auf Ihr Xorg-Display (das X11-Grafiksystem) - nicht nur, weil es sich tatsächlich um eine grafische App handelt, sondern auch, weil es ein Zwischenablage-Manager ist und X11 dies ebenfalls abdeckt.

Das (Haupt-) Problem: Ihr Xorg-Display ist beim Start noch nicht verfügbar. Es wird beim Anmelden gestartet, lange nachdem der Systemstart abgeschlossen ist. Daher ist es nicht möglich, xfce4-clipman "beim Start" zu starten. Sie möchten die App auch beim Anmelden starten.

(Linux gebaut mehrere Benutzer zu unterstützen, die sich anmelden können und melden Sie sich jederzeit aus - jeder Benutzer erhält eine brandneue Kopie von Xorg läuft, und der Login - Bildschirm selbst bekommt man auch so Dienste nicht auf Xorg zur Verfügung stehen zählen kann. Bei alle. )

Apps beim Anmelden starten

Die meisten Desktop-Umgebungen, einschließlich Xfce, können "Login" -Aufgaben über *.desktopDateien starten (auf diese Weise werden verschiedene Xfce-Komponenten gestartet).

Sie sind /etc/xdg/autostart/für globale Dienste und ~/.config/autostart/für persönliche Dienste bestimmt . Nachdem Sie eine erstellt haben, ist sie standardmäßig aktiviert, kann aber weiterhin über deaktiviert werden xfce4-session-settings.

Tatsächlich installiert sogar xfce4-clipman seine eigene Autostart-Datei in / etc / xdg / autostart - diese wird benannt xfce4-clipman-plugin-autostart.desktop. Es sollte automatisch funktionieren, solange Sie Xfce4 verwenden (aufgrund der OnlyShowIn=XFCELeitung).

Wenn auf Ihrem System diese Datei nicht vorhanden ist oder Sie xfce4-clipman in einer Nicht-Xfce-Desktopumgebung verwenden möchten, können Sie eine neue erstellen. Autostart- .desktopDateien sehen im Allgemeinen so aus:

[Desktop Eintrag] Typ = Anwendung Name = Zwischenablage-Manager Exec = xfce4-clipman Terminal = falsch 

Nicht-CLI-Programme manuell starten

Viele Desktop-Umgebungen verfügen über ein Dialogfeld "Ausführen" AltF2, in dem Sie Programme ausführen können, ohne ein Terminal zu belegen.

Verschiedene Methoden, um dasselbe von einem Terminal aus zu tun, sind:

  • (setsid xfce4-clipman 2>/dev/null &)
  • (xfce4-clipman &)
  • nohup xfce4-clipman &
  • xfce4-clipman & disown
  • und so weiter.

Andere Probleme mit Ihrem init.d-Skript

In Situationen, in denen Systemdienste angemessen sind, sollten Sie bedenken, dass Dateien in /etc/init.d nicht nur einfache Skripts sind, sondern auch beim Herunterfahren ausgeführt werden und Unterbefehle wie "stop" oder "restart" akzeptieren müssen. Wenn das System aufruft /etc/init.d/your_service stop, muss das Initscript den Dienst tatsächlich stoppen - nicht erneut starten!

Sie haben die Frage mit markiert. Warum sollten Sie sich also nicht die Mühe machen, *.servicestattdessen eine systemd- Datei zu schreiben ? Während "richtige" init.d-Skripts mehrere Bildschirme füllen können, sind systemd .services oft weniger als ein Dutzend Zeilen.

Was noch wichtiger ist: Es gibt viele Dutzende von Diensten, die zu verschiedenen Zeitpunkten starten. In späteren Stadien stehen einige Einrichtungen zur Verfügung, die in früheren Stufen nicht vorhanden sind. (Zum Beispiel Networking.)

Wenn Ihr Initscript die Bestellanforderungen nicht explizit angibt ("muss vor Y, aber nach Z" ausgeführt werden), wird es vom Betriebssystem in einer unvorhersehbaren Phase parallel zu allen anderen ausgeführt. Wenn Sie viel Glück haben, wird es im richtigen Moment laufen - aber meistens wird es zu früh laufen, damit etwas funktioniert.

In systemeigenen Einheitendateien wird die Reihenfolge mithilfe von Before=und After=Parametern angegeben. (Es empfiehlt sich, Abhängigkeiten mit Requires=oder anzugeben Wants=.) Inzwischen verwenden init.d-Skripts (sowohl mit SysVinit als auch mit systemd) einen speziellen Kommentarblock ### BEGIN INIT INFO, der mit Parametern wie Required-Start:und markiert ist Should-Start:.