Avvio automatico script .sh al login di un specifico utente

13 risposte [Ultimo contenuto]
Ritratto di errezeta
errezeta
(Junior)
Offline
Junior
Iscritto: 05/04/2018
Messaggi: 15

Buongiorno,
utilizzo come client di lavoro Debian 9 (gnome).
Per comodità ho creato uno script che collega in automatico la VPN (OpenVPN) quando viene rilevato l'ip pubblico dell'ufficio.
ho la necessità lo script venga eseguito quando accedo al mio profilo utente gnome senza che venga eseguito con l'accesso di altri utenti.
Prove effettuate:
- creato file .desktop per che esegue lo script e inserito nell'avvio automatico tramite "Strumento di personalizzazione GNOME" -> non funziona
- inserito .sh in .profile del mio utente -> non va
- se lo inserisco in .bash_rc funziona solo quando avvio il terminale
- provato ad inserirlo dentro .config/autostart/ -> non funziona

lo script se lanciato a mano naturalmente funziona correttamente.

avete idea di come risolvere la cosa?

ecco lo script:
-----
#!/bin/bash

NETWORK=( $(curl icanhazip.com) )

if [ $NETWORK == "X.X.X.X" ]
then
nmcli connection up id nome_vpn
fi
-----

grazie

Ritratto di compact
compact
(Geek)
Offline
Geek
Iscritto: 11/12/2004
Messaggi: 160

crea il file .bash_login e inserisci lo script non so se effettivamente funziona con il tuo:

#!/bin/bash

NETWORK=( $(curl icanhazip.com) )

if [ $NETWORK == "X.X.X.X" ]
then
nmcli connection up id nome_vpn
fi

ma questo sicuramente funziona

cat .bash_login
#! /bin/bash
 
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
 
echo "Buongiorno"

Ritratto di errezeta
errezeta
(Junior)
Offline
Junior
Iscritto: 05/04/2018
Messaggi: 15

No, purtroppo non funziona. neanche se lo inserisco direttamente in .bashrc Crying

Ritratto di badroot
badroot
(Guru)
Offline
Guru
Iscritto: 22/08/2008
Messaggi: 2068

Ciao,
nello script che usi per avviare nmcli prova ad aggiungere prima un comando sleep 5s .... non vorrei che quando avvii nmcli questo non riesca a comunicare con nm-applet perchè magari non è ancora avviato completamente il desktop, non che sia certo che i due debbano comunicare.... però.

PS : ovviamente do per scontato che quando dici che non funziona da .profile o .bashrc tu abbia già controllato di aver usato la sintassi corretta per richiamare lo script. Lo dico perchè non hai postato nulla riguardo a come esegui lo script da .profile.

Potresti anche provare a ridirigere l'output dello script per vedere quale eventuale messaggio di errore ottieni quando non funziona.

Ritratto di errezeta
errezeta
(Junior)
Offline
Junior
Iscritto: 05/04/2018
Messaggi: 15

ho provato ad inserire lo sleep 5s ma senza successo.
Se lo script lo inserisco in .bashrc in questo modo:

. /home/mioutente/Script/script.sh

lo script viene correttamente eseguito ma solo quando avvio il terminale mentre io vorrei farlo eseguire all'accesso della sessione gnome senza dover aprire il terminale.

ho eseguito un altro test:
ho creato un file .service per far gestire l'avvio a systemd come riportato sotto:

[Unit]
Description=VPN Service
After=network.target
 
[Service]
User=mioutente
Type=oneshot
ExecStart=/home/mioutente/script.sh
 
[Install]
WantedBy=graphical.target

ma se avvio mi restituisce l'errore: Not authorized to control networking.
se lo stesso comando lo lancio dalla shell con il mio utente non viene richiesta nessuna autorizzazione e tutto funziona correttamente.

Ritratto di azioga
azioga
(Geek)
Offline
Geek
Iscritto: 26/02/2018
Messaggi: 55

e una .bash_login così:

#! /bin/bash
 
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
 
. /home/mioutente/Script/script.sh

Ritratto di errezeta
errezeta
(Junior)
Offline
Junior
Iscritto: 05/04/2018
Messaggi: 15

no, niente.

Ritratto di azioga
azioga
(Geek)
Offline
Geek
Iscritto: 26/02/2018
Messaggi: 55

no. niente .... non è d'aiuto.

il comando viene eseguito? da errore? hai provato a fargli fare qualcos'altro tipo scrivere una stringa in un file?

Ritratto di errezeta
errezeta
(Junior)
Offline
Junior
Iscritto: 05/04/2018
Messaggi: 15

se provo a lanciare a mano bash_login tramite il comando:
source bash_login
viene eseguito con successo. ma al login non sembra che venga neanche lanciato.

Ho provato ad inserirlo anche in .profile ma una volta eseguito il logout non riesco più ad accedere al mio utente.
in messages trovo questo errore:

Apr  9 17:41:57 MIOPC /usr/lib/gdm3/gdm-x-session[5749]: /etc/gdm3/Xsession: 4: /home/mioutente/Script/script.sh: Syntax error: "(" unexpected

Ritratto di azioga
azioga
(Geek)
Offline
Geek
Iscritto: 26/02/2018
Messaggi: 55

è .bash_login non bash_login....ma spero sia solo un errore di battitura

sembra che le parentesi del tuo script diano fastidio.

prova a settare NETWORK= all'indirizzo ip e vedi se funziona

Ritratto di badroot
badroot
(Guru)
Offline
Guru
Iscritto: 22/08/2008
Messaggi: 2068

Scusa ma a me pare che sia proprio sbagliato il tuo script .... come faccia a funzionare se lo esegui a mano non so .... a me così come è da errore.
Prova a eseguire da terminale :

sh -x /home/mioutente/Script/script.sh

PS : ho copiato quanto indicato nel primo post, e mi da errore di sintassi.

Questa una versione modificata che non da errore, sembra che vadano rimossi i "." dell'indirizzo IP. Ovviamente fallisce l'if per via dell'ip usato nell'esempio, ma sintatticamente sembra corretto. Se può aiutare ....

#!/bin/bash
 
NETWORK=`curl icanhazip.com`
VPNIP=19216811
 
CURRIP=`echo $NETWORK | sed 's/\.//g'`
 
if [ "$CURRIP" -eq "$VPNIP" ] ; then
nmcli connection up id nome_vpn
fi