1
Bash, skrypty powłoki / Odp: Jak uruchomić skrypt w momencie pojawienia się pulpitu?
« dnia: Dzisiaj o 17:55:47 »
Pobawiłem się jeszcze trochę. ( Ubuntu Mate 22.04 )
Wnioski:
1. Wiadomo skrypt uruchomiony z " XDG Autostart " działa.
2. Cron
2.1. Cron z konta root, tam dźwięku z konta root (mam na myśli sudo) nie udało mi się uruchomić.
cvlc nawet informuje że z konta root nie będzie działał ponieważ jest to nie polecane ze względów bezpieczeństwa.
( Oczywiście po przekierowaniu wyjścia komendy do pliku z logiem )
Po za tym sam skrypt bash powinien uruchomić się.
Natomiast notify-send moze wymagać dodania zmiennych
2.2. Cron z konta użytkownika, tutaj dźwięk udało mi się uruchomić,
ale wymaga dodania zmiennych " export XDG_RUNTIME_DIR="/run/user/1000" && export DISPLAY=:0.0 && "
Z czego zmienna środowiskowa XDG_RUNTIME_DIR jest potrzebna do odtwarzania dźwięku https://wiki.archlinux.org/title/PulseAudio#Play_sound_from_a_non-interactive_shell_(systemd_service,_cron)
Mój wpis w cronie wygląda tak
Przykład wygląda tak ( Oczywiście musiałem wcześniej doinstalować pakiet inotify-tools )
Jednak mam wątpliwości czy warto używać inotifywait w tym przypadku, ponieważ:
systemy zazwyczaj ładują się dość szybko, a inotifywait nie jest częścią bash i uruchamiając się też zużywa zasoby.
Inotifywait się lepiej sprawdza gdy jest duży czas oczekiwania.
Drugi sposób / przykład o którym wspominałem
Także widzisz, nawet tutaj musiałem użyć komendy sleep.
Jedyna różnica to taka, że pętla się wykonuje tak długo aż oba procesy będą uruchomione.
Mimo wszystko dla każdego przykładu u siebie dodatkowo dałbym 1 sekundę opóźnienia
przed wykonaniem dźwięku dla lepszego efektu,
ponieważ dźwięk u mnie minimalnie pojawia się wcześniej niż pulpit.
Wnioski:
1. Wiadomo skrypt uruchomiony z " XDG Autostart " działa.
2. Cron
2.1. Cron z konta root, tam dźwięku z konta root (mam na myśli sudo) nie udało mi się uruchomić.
cvlc nawet informuje że z konta root nie będzie działał ponieważ jest to nie polecane ze względów bezpieczeństwa.
( Oczywiście po przekierowaniu wyjścia komendy do pliku z logiem )
Po za tym sam skrypt bash powinien uruchomić się.
Natomiast notify-send moze wymagać dodania zmiennych
Cytuj
export DISPLAY=:0.0 && export XAUTHORITY=/home/twoja_nazwa_uzytkownika/.Xauthority
2.2. Cron z konta użytkownika, tutaj dźwięk udało mi się uruchomić,
ale wymaga dodania zmiennych " export XDG_RUNTIME_DIR="/run/user/1000" && export DISPLAY=:0.0 && "
Z czego zmienna środowiskowa XDG_RUNTIME_DIR jest potrzebna do odtwarzania dźwięku https://wiki.archlinux.org/title/PulseAudio#Play_sound_from_a_non-interactive_shell_(systemd_service,_cron)
Mój wpis w cronie wygląda tak
Kod: [Zaznacz]
#@reboot export XDG_RUNTIME_DIR="/run/user/1000" && export DISPLAY=:0.0 && $(bash /home/moja_nazwa__uzytkownika/Pulpit/test/Welkom2.bash)
Przykład wygląda tak ( Oczywiście musiałem wcześniej doinstalować pakiet inotify-tools )
Kod: [Zaznacz]
#!/bin/bash
inotifywait -q -e modify,delete_self,move_self /home/moja_nazwa__uzytkownika/.xsession-errors &>/dev/null
/usr/bin/canberra-gtk-play -i service-login
/usr/bin/notify-send -u normal -i "info" 'Boss !!' 'To jest test ze skryptu'
Jednak mam wątpliwości czy warto używać inotifywait w tym przypadku, ponieważ:
systemy zazwyczaj ładują się dość szybko, a inotifywait nie jest częścią bash i uruchamiając się też zużywa zasoby.
Inotifywait się lepiej sprawdza gdy jest duży czas oczekiwania.
Drugi sposób / przykład o którym wspominałem
Kod: [Zaznacz]
#!/bin/bash
until pidof pulseaudio && pidof mate-session ; do
sleep 1
done
/usr/bin/canberra-gtk-play -i service-login
/usr/bin/notify-send -u normal -i "info" 'Boss !!' 'To jest test ze skryptu'
Także widzisz, nawet tutaj musiałem użyć komendy sleep.
Jedyna różnica to taka, że pętla się wykonuje tak długo aż oba procesy będą uruchomione.
Mimo wszystko dla każdego przykładu u siebie dodatkowo dałbym 1 sekundę opóźnienia
przed wykonaniem dźwięku dla lepszego efektu,
ponieważ dźwięk u mnie minimalnie pojawia się wcześniej niż pulpit.