Köra script vid startup i Raspbian

Permalänk

Köra script vid startup i Raspbian

Hej!

Sitter här med en Raspberry Pi 3 som kör Raspbian och försöker få ett script jag har skapat att köras vid varje uppstart av min Raspberry Pi. Scriptet fungerar och är exekverbart, men jag får verkligen inte till det med att köra scriptet vid varje uppstart. Är det någon som har en bra step-by-step guide att rekommendera för detta eller möjligtvis kan berätta hur jag gör detta?

//GreatLinkan

Visa signatur

AMD Ryzen 5 3600 | Noctua NH-U14S | ASUS TUF GAMING X570-PLUS | ASUS PCE-AX3000 | Fractal Design North | Corsair Vengeance 2x8GB DDR4@3000 Mhz | MSI GTX 1070 Gaming X 8GB | Fractal Design Newton R2 650W | Kingston A2000 1TB | Seagate Barracuda 1TB | Windows 11

Permalänk
Medlem
Permalänk

Har skrivit "@reboot /home/pi/Documents/Scripts/mouse.sh &" i Cron, funkar inte. Något som jag har missat?

Visa signatur

AMD Ryzen 5 3600 | Noctua NH-U14S | ASUS TUF GAMING X570-PLUS | ASUS PCE-AX3000 | Fractal Design North | Corsair Vengeance 2x8GB DDR4@3000 Mhz | MSI GTX 1070 Gaming X 8GB | Fractal Design Newton R2 650W | Kingston A2000 1TB | Seagate Barracuda 1TB | Windows 11

Permalänk
Medlem

@GreatLinkan: Kolla så att skriptet är exekverbart. Skriv "ls -l" i mappen som du har skriptet och se om filen är grön samt
att det står x med i permissiona

Annars så ska det funka. Kan testa "@reboot bash /home/pi/Documents/Scripts/mouse.sh &"

och har du med #! /bin/bash/ högst upp i skriptet?

Visa signatur

Rog Strix B550-i | Ryzen 7 5800X @ 4.3Ghz | Corsair Vengeance LP 2x8gb 3000Mhz | Asus RTX 3060ti |
Pirat Prusa MK2 | Prusa Mini

Permalänk
Medlem

Hur ser skriptet ut? Om jag har förstått rätt så saknas vissa PATH-värden när man använder cron, vilket innebär att du kan behöva ange fullständig sökväg till vissa program.

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Skrivet av DeGreeZ:

@GreatLinkan: Kolla så att skriptet är exekverbart. Skriv "ls -l" i mappen som du har skriptet och se om filen är grön samt
att det står x med i permissiona

Annars så ska det funka. Kan testa "@reboot bash /home/pi/Documents/Scripts/mouse.sh &"

och har du med #! /bin/bash/ högst upp i skriptet?

Scriptet är exekverbart och fungerar att köra med ./ i terminalen. Jag har med #! /bin/bash.

Visa signatur

AMD Ryzen 5 3600 | Noctua NH-U14S | ASUS TUF GAMING X570-PLUS | ASUS PCE-AX3000 | Fractal Design North | Corsair Vengeance 2x8GB DDR4@3000 Mhz | MSI GTX 1070 Gaming X 8GB | Fractal Design Newton R2 650W | Kingston A2000 1TB | Seagate Barracuda 1TB | Windows 11

Permalänk
Skrivet av L'ombra:

Hur ser skriptet ut? Om jag har förstått rätt så saknas vissa PATH-värden när man använder cron, vilket innebär att du kan behöva ange fullständig sökväg till vissa program.

Så här ser scriptet ut:

#! /bin/bash
xsetroot -cursor_name left_ptr
exit

Scriptet ligger i en mapp som heter Scripts, som ligger i mappen Documents. Dess path blir /home/pi/Documents/Scripts/mouse.sh <--(Namnet på scriptet).

Visa signatur

AMD Ryzen 5 3600 | Noctua NH-U14S | ASUS TUF GAMING X570-PLUS | ASUS PCE-AX3000 | Fractal Design North | Corsair Vengeance 2x8GB DDR4@3000 Mhz | MSI GTX 1070 Gaming X 8GB | Fractal Design Newton R2 650W | Kingston A2000 1TB | Seagate Barracuda 1TB | Windows 11

Permalänk
Medlem

Vet inte vad xsetroot är, men testa ange fullständig sökväg till den kanske.

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Skrivet av L'ombra:

Vet inte vad xsetroot är, men testa ange fullständig sökväg till den kanske.

Jag kör min Raspberry remote via Tightvnc. xsetroot ändrar muspekaren som man ser i Tightvnc.

Är inte riktigt med på vilken sökväg jag ska ange som du syftar på.

Visa signatur

AMD Ryzen 5 3600 | Noctua NH-U14S | ASUS TUF GAMING X570-PLUS | ASUS PCE-AX3000 | Fractal Design North | Corsair Vengeance 2x8GB DDR4@3000 Mhz | MSI GTX 1070 Gaming X 8GB | Fractal Design Newton R2 650W | Kingston A2000 1TB | Seagate Barracuda 1TB | Windows 11

Permalänk
Medlem
Skrivet av GreatLinkan:

Jag kör min Raspberry remote via Tightvnc. xsetroot ändrar muspekaren som man ser i Tightvnc.

Är inte riktigt med på vilken sökväg jag ska ange som du syftar på.

Kör "which xsetroot" i ett terminalfönster så får du sökvägen till filen. På en av mina maskiner är sökvägen /usr/bin/xsetroot, klistra in det i ditt script.

Skickades från m.sweclockers.com

Visa signatur

Det finns bara två sorters hårddiskar: de som har gått sönder och de som skall gå sönder.

Permalänk
Skrivet av zarkov:

Kör "which xsetroot" i ett terminalfönster så får du sökvägen till filen. På en av mina maskiner är sökvägen /usr/bin/xsetroot, klistra in det i ditt script.

Skickades från m.sweclockers.com

Så här då?

#! /bin/bash
/usr/bin/xsetroot -cursor_name left_ptr
exit

Visa signatur

AMD Ryzen 5 3600 | Noctua NH-U14S | ASUS TUF GAMING X570-PLUS | ASUS PCE-AX3000 | Fractal Design North | Corsair Vengeance 2x8GB DDR4@3000 Mhz | MSI GTX 1070 Gaming X 8GB | Fractal Design Newton R2 650W | Kingston A2000 1TB | Seagate Barracuda 1TB | Windows 11

Permalänk
Medlem

Precis.

Skickades från m.sweclockers.com

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Skrivet av L'ombra:

Precis.

Skickades från m.sweclockers.com

Funkar fortfarande inte.

Visa signatur

AMD Ryzen 5 3600 | Noctua NH-U14S | ASUS TUF GAMING X570-PLUS | ASUS PCE-AX3000 | Fractal Design North | Corsair Vengeance 2x8GB DDR4@3000 Mhz | MSI GTX 1070 Gaming X 8GB | Fractal Design Newton R2 650W | Kingston A2000 1TB | Seagate Barracuda 1TB | Windows 11

Permalänk
Medlem

Har inte använt cron själv, så jag vet inte hur man felsöker lämpligast, kanske finns loggar någonstans? I annat fall skulle du kunna testa att skapa en fil i skriptet, bara för att kontrollera att det ens körs.

touch /home/pi/cron-exec

Och/eller försök få ut eventuella felmeddelanden:

@reboot /home/pi/Documents/Scripts/mouse.sh &2> /home/pi/cron-log &

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Skrivet av L'ombra:

Har inte använt cron själv, så jag vet inte hur man felsöker lämpligast, kanske finns loggar någonstans? I annat fall skulle du kunna testa att skapa en fil i skriptet, bara för att kontrollera att det ens körs.

touch /home/pi/cron-exec

Och/eller försök få ut eventuella felmeddelanden:

@reboot /home/pi/Documents/Scripts/mouse.sh &2> /home/pi/cron-log &

Scriptet funkar vid uppstart, filen skapas. Antar att det är xsetroot kommandot som är problemet då?

Visa signatur

AMD Ryzen 5 3600 | Noctua NH-U14S | ASUS TUF GAMING X570-PLUS | ASUS PCE-AX3000 | Fractal Design North | Corsair Vengeance 2x8GB DDR4@3000 Mhz | MSI GTX 1070 Gaming X 8GB | Fractal Design Newton R2 650W | Kingston A2000 1TB | Seagate Barracuda 1TB | Windows 11

Permalänk
Medlem
Skrivet av GreatLinkan:

Scriptet funkar vid uppstart, filen skapas. Antar att det är xsetroot kommandot som är problemet då?

Kan tänkas. Skapades cron-log-filen? Kolla om det står något i den.

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Medlem

Eller i /var/log/syslog

Visa signatur

Det finns bara två sorters hårddiskar: de som har gått sönder och de som skall gå sönder.

Permalänk
Medlem

I Unix är det så att om ett kommando kräver rootbehörighet så måste scriptet ha en s-bit.
Kanske är lika i Linux?
https://www.linux.com/learn/tutorials/309527-understanding-li...

Permalänk
Skrivet av L'ombra:

Kan tänkas. Skapades cron-log-filen? Kolla om det står något i den.

Svar ja. Den är väldigt tom.

Skrivet av zarkov:

Eller i /var/log/syslog

Inget konstigt hittat där.

Skrivet av NoWin:

I Unix är det så att om ett kommando kräver rootbehörighet så måste scriptet ha en s-bit.
Kanske är lika i Linux?
https://www.linux.com/learn/tutorials/309527-understanding-li...

Så här då?

#! /bin/bash /usr/bin/xsetroot -cursor_name left_ptr -s exit

Visa signatur

AMD Ryzen 5 3600 | Noctua NH-U14S | ASUS TUF GAMING X570-PLUS | ASUS PCE-AX3000 | Fractal Design North | Corsair Vengeance 2x8GB DDR4@3000 Mhz | MSI GTX 1070 Gaming X 8GB | Fractal Design Newton R2 650W | Kingston A2000 1TB | Seagate Barracuda 1TB | Windows 11

Permalänk
Medlem

Skulle helt enkelt kunna vara så att det inte är något fel på ditt skript överhuvudtaget, men att det inte har någon effekt om du kör det för tidigt under uppstartsprocessen.

Edit: Eller mitt tidigare förslag var nog felaktigt förresten. Tror & ska bort i '&2>'.

@reboot /home/pi/Documents/Scripts/mouse.sh 2> /home/pi/cron-log &

Visa signatur

AMD Ryzen 7 5800X | 32 GB Corsair Vengeance 3200 MHz | ASUS TUF Geforce RTX 3080

Permalänk
Medlem
Skrivet av GreatLinkan:

Svar ja. Den är väldigt tom.

Inget konstigt hittat där.

Så här då?

#! /bin/bash /usr/bin/xsetroot -cursor_name left_ptr -s exit

Nej, tror att det skall vara sudo chmod u+s scriptfilnamnet

Permalänk
Skrivet av NoWin:

Nej, tror att det skall vara sudo chmod u+s scriptfilnamnet

Funkade inte.

Visa signatur

AMD Ryzen 5 3600 | Noctua NH-U14S | ASUS TUF GAMING X570-PLUS | ASUS PCE-AX3000 | Fractal Design North | Corsair Vengeance 2x8GB DDR4@3000 Mhz | MSI GTX 1070 Gaming X 8GB | Fractal Design Newton R2 650W | Kingston A2000 1TB | Seagate Barracuda 1TB | Windows 11

Permalänk

Blev tvungen å göra en användare
Du försöker köra ett X11 program från cron vid uppstart.
Ok. För det första: Har X startat innan skriptet körs? Jag tvivlar på det.
För det andra: X11 programmen beror på "DISPLAY=" variabeln(oftast DISPLAY=:0) som talar om för programmet till vilken skärm det skall kopplas till.
För det tredje. Har programmet rättigheterna för att kopplas mot X servern. Se "XAUTHORITY=" variabeln som pekar mot en fil som endast användaren har läsrättigheter till.

Skriv "env |less" i terminalen så ser du miljövariablerna.
DISPLAY= och XAUTHORITY= variablerna sätts i samband med inloggning och ärvs av alla program du startar inifrån grafiksystemet. Det är därför det fungerar i terminalen, men inte i cron. Cron har helt enkelt inte ärvt variablerna eftersom det körs utanför.

Flytta skriptet till /etc/X11/Xsession.d/ så skall det köras automatiskt då användaren loggar in i X med miljövariabler, rättigheter och allt.
Se https://www.debian-administration.org/article/50/Running_appl...

Permalänk
Skrivet av FattarNiInte:

Blev tvungen å göra en användare
Du försöker köra ett X11 program från cron vid uppstart.
Ok. För det första: Har X startat innan skriptet körs? Jag tvivlar på det.
För det andra: X11 programmen beror på "DISPLAY=" variabeln(oftast DISPLAY=:0) som talar om för programmet till vilken skärm det skall kopplas till.
För det tredje. Har programmet rättigheterna för att kopplas mot X servern. Se "XAUTHORITY=" variabeln som pekar mot en fil som endast användaren har läsrättigheter till.

Skriv "env |less" i terminalen så ser du miljövariablerna.
DISPLAY= och XAUTHORITY= variablerna sätts i samband med inloggning och ärvs av alla program du startar inifrån grafiksystemet. Det är därför det fungerar i terminalen, men inte i cron. Cron har helt enkelt inte ärvt variablerna eftersom det körs utanför.

Flytta skriptet till /etc/X11/Xsession.d/ så skall det köras automatiskt då användaren loggar in i X med miljövariabler, rättigheter och allt.
Se https://www.debian-administration.org/article/50/Running_appl...

TightVNC kör på display 1 som jag har fattat det som. När jag kör "env | less" så står det:

DISPLAY:1.0 XAUTHORITY=/home/pi/.Xauthority

Jag har flyttat scriptet till /etc/X11/Xsession.d/, men det funkar inte. Filen som Xauthority pekar mot är tom för mig när jag öppnar den i nano.

Visa signatur

AMD Ryzen 5 3600 | Noctua NH-U14S | ASUS TUF GAMING X570-PLUS | ASUS PCE-AX3000 | Fractal Design North | Corsair Vengeance 2x8GB DDR4@3000 Mhz | MSI GTX 1070 Gaming X 8GB | Fractal Design Newton R2 650W | Kingston A2000 1TB | Seagate Barracuda 1TB | Windows 11

Permalänk

Hm. Har läst på lite nu. man xsession
Testa att infoga kommandot i ~/.xsessionrc .
Hur fungerar det där med vnc och raspbian egentligen? Körs det någon skrivbordsmiljö typ gnome / kde eller nåt. Finns det nån loginhanterare? Är vnc en egen X server eller ett program som startas i X? Jag tror det finns båda sorterna vnc.
Off topic:
DISPLAY= är en kul finess i X11. Den kan tom peka mot en annan dator, som kör X11, så här DISPLAY=192.168.0.3:0 , då ploppar programmet upp över tcp/ip på en annan dators skärm.
Rättigheter ges med kommandot xhost. "xhost +" för att tillåta alla(!) program från alla datorer(!) med nätverksåtkomst att ansluta. "xhost +ipnummer" för att tillåta alla program från en viss ipadress. Oftast tunnlar man X11 över ssh istället, mycket säkrare och färdigt inbyggt i ssh.

Permalänk
Medlem

@FattarNiInte:

Jag har haft precis samma problem som dig. Jag har försökt enligt en hel bunt med guider och gjort dem flesta stegen du också gjort. Jag får det inte att fungera med raspbian.

Så nu har installerat ubuntu server och försöker lära mig lite sakta.

Hur svårt ska det vara att köra ett skript egentligen? x)

Permalänk

@aradove:
Det är inte jag som har problem :-). Jag har inte ens en pi. Försöker bara hjälpa TS köra sitt kommando.
Kört linux, mest debian(-ish), sedan kernel 2.2.x tiden.

Permalänk
Skrivet av FattarNiInte:

Hm. Har läst på lite nu. man xsession
Testa att infoga kommandot i ~/.xsessionrc .
Hur fungerar det där med vnc och raspbian egentligen? Körs det någon skrivbordsmiljö typ gnome / kde eller nåt. Finns det nån loginhanterare? Är vnc en egen X server eller ett program som startas i X? Jag tror det finns båda sorterna vnc.
Off topic:
DISPLAY= är en kul finess i X11. Den kan tom peka mot en annan dator, som kör X11, så här DISPLAY=192.168.0.3:0 , då ploppar programmet upp över tcp/ip på en annan dators skärm.
Rättigheter ges med kommandot xhost. "xhost +" för att tillåta alla(!) program från alla datorer(!) med nätverksåtkomst att ansluta. "xhost +ipnummer" för att tillåta alla program från en viss ipadress. Oftast tunnlar man X11 över ssh istället, mycket säkrare och färdigt inbyggt i ssh.

~/.xsessionrc gav "No such file or directory". Tror att det är Xcfe som Raspbian använder sig av. När du skriver loginhanterare, menar du om jag loggar in på Raspbian via ett användarnamn och lösenord då? Jag misstänker att Vnc har en X server. Det stod nämligen att "New 'X' desktop is raspberrypi:1" när jag drog igång programmet, som i denna video.

Visa signatur

AMD Ryzen 5 3600 | Noctua NH-U14S | ASUS TUF GAMING X570-PLUS | ASUS PCE-AX3000 | Fractal Design North | Corsair Vengeance 2x8GB DDR4@3000 Mhz | MSI GTX 1070 Gaming X 8GB | Fractal Design Newton R2 650W | Kingston A2000 1TB | Seagate Barracuda 1TB | Windows 11

Permalänk

Jag menade om det körs någon grafisk loginhanterare typ XDM, GDM eller lightdm på vncservern.
Skitsamma, om du startar vnc på samma vis som gubben i youtubefilmen så körs ingen grafisk loginhanterare.
Antar att det är samma vnc program du har som gubben i filmen dvs tightvncserver. I så fall är det bara att lägga till det där "/usr/bin/xsetroot -cursor_name left_ptr" i ~/.vnc/xstartup filen.
Har testat själv här på min dator så jag vet att det funkar.

Permalänk
Skrivet av FattarNiInte:

Jag menade om det körs någon grafisk loginhanterare typ XDM, GDM eller lightdm på vncservern.
Skitsamma, om du startar vnc på samma vis som gubben i youtubefilmen så körs ingen grafisk loginhanterare.
Antar att det är samma vnc program du har som gubben i filmen dvs tightvncserver. I så fall är det bara att lägga till det där "/usr/bin/xsetroot -cursor_name left_ptr" i ~/.vnc/xstartup filen.
Har testat själv här på min dator så jag vet att det funkar.

Amen gött, nu funkar det! Tackar!

Visa signatur

AMD Ryzen 5 3600 | Noctua NH-U14S | ASUS TUF GAMING X570-PLUS | ASUS PCE-AX3000 | Fractal Design North | Corsair Vengeance 2x8GB DDR4@3000 Mhz | MSI GTX 1070 Gaming X 8GB | Fractal Design Newton R2 650W | Kingston A2000 1TB | Seagate Barracuda 1TB | Windows 11