Come avviare automaticamente il servizio in Linux?


4

Ho un programma chiamatoredshift che vorrei avviare automaticamente quando eseguo l'accesso. Se eseguo " redshift" in un terminale (o redshift &) o tramite alt+ f2, questo verrà avviato. Non credo che abbia uno script init, quindi l'aggiunta di " redshift" al mio .profilefile lo caricherà all'avvio? Suppongo che anche un cronjob impostato su @rebootpotrebbe funzionare?

Penso che alcuni programmi debbano essere eseguiti da un determinato ambiente utente, in particolare quelli che riguardano elementi grafici? Ad esempio, se eseguo SSH su una macchina remota e provo ad aprire un programma GUI, ovviamente questo non sarà possibile, quindi fallirà. Questo è quello che sto cercando di evitare riguardo a dove eseguo questo programma.


Intendi eseguirlo ogni volta che accedi? O all'avvio? Che ne dite di sessioni ssh, il programma dovrebbe iniziare se si accede in remoto al PC? Se hai già effettuato l'accesso e hai aperto un nuovo terminale, devi ripetere l'esecuzione del programma? In quale distribuzione sei?
MariusMatutiae,

Non importa se succede all'avvio o quando accedo. Voglio solo che venga eseguito ogni volta che inizio a utilizzare il mio computer. Attualmente in esecuzione Debian. E no, quando apro un terminale, non dovrebbe funzionare. Questo programma dovrebbe idealmente iniziare prima che io abbia mai aperto un terminale (era solo un'idea).
Peter,

Risposte:


6

redshift non è un servizio di sistema; funziona all'interno della sessione di accesso, poiché deve accedere al server X11. Quindi sostanzialmente dovrebbe essere avviato automaticamente allo stesso modo della maggior parte dei programmi grafici:

Metodo 1

Aggiungi un file redshift.desktopalla directory di avvio automatico XDG ~/.config/autostart/:

[Desktop Entry]
Type=Application
Name=Redshift
Exec=/usr/bin/redshift

Funziona con ambienti desktop che seguono le specifiche di avvio automatico XDG; questo include GNOME, KDE, Xfce e molti altri. In alcuni è modificabile tramite interfacce grafiche (ad es. gnome-session-propertiesIn GNOME).

Metodo 2

Aggiungi la seguente riga ...

redshift &

... al tuo ~/.xprofile. Funziona con la maggior parte dei display manager (gdm, kdm, lightdm, lxdm, sddm - non sottile, tuttavia).

Se si utilizza lo strumento startx , ~/.xprofilenon viene utilizzato per impostazione predefinita, quindi è necessario aggiornare lo ~/.xinitrcscript: aggiungere la stessa riga da qualche parte prima di avviare il gestore sessioni.

Metodo 3

Se usi un display manager come GDM, potresti voler eseguire il programma prima di accedere, in modo che si applichi anche alla schermata di accesso. Come fare ciò varia tra i gestori display, ma in GDM può essere fatto modificando /etc/gdm/Init/Default. (Dichiarazione di non responsabilità: non ho provato e questo potrebbe essere il file sbagliato.)

Cose che non funzioneranno

  • Uno script di inizializzazione del sistema non funzionerà poiché viene eseguito indipendentemente dalle sessioni grafiche - non avrà né il giusto $DISPLAYné il giusto $XAUTHORITYset; se li hardcode, potrebbe finire per provare a connettersi al display sbagliato (ad es. hardcode DISPLAY=":0"ma la tua sessione inizia alle :1); e se lo fai provare tutti i display, è molto probabile che lo script si avvii prima che qualsiasi display X11 sia stato avviato.

  • Un @rebootcronjob verrà eseguito come l'utente giusto (anziché dover su/ sudo), ma per il resto ha tutti gli stessi problemi degli script di inizializzazione del sistema.


Va bene, sembra che le opzioni 1 e 2 non funzionino e non so se dovrei provare 3. Sto eseguendo i3 che è un gestore di finestre di piastrellatura e non un desktop manager comune.
Peter,

L'opzione 2 dovrebbe sicuramente funzionare, quindi.
gravità
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.