Köra script vid startup i Raspbian

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012

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

Intel 2500k @ 4.2Ghz | Noctua NH-U14S | ASUS P8Z68-V LX | Fractal Design Define R4 | Corsair XMS3 Vengeance 2x4GB DDR3 1600 Mhz | Gigabyte GTX 970 4GB | Fractal Design Newton R2 650W | Samsung 840 EVO 250GB | Seagate SSHD 1TB | Seagate Barracuda 1 TB | Windows 10

Trädvy Permalänk
Medlem
Plats
ytterby
Registrerad
Jul 2011
Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012

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

Intel 2500k @ 4.2Ghz | Noctua NH-U14S | ASUS P8Z68-V LX | Fractal Design Define R4 | Corsair XMS3 Vengeance 2x4GB DDR3 1600 Mhz | Gigabyte GTX 970 4GB | Fractal Design Newton R2 650W | Samsung 840 EVO 250GB | Seagate SSHD 1TB | Seagate Barracuda 1 TB | Windows 10

Trädvy Permalänk
Medlem
Plats
Falköping
Registrerad
Jan 2009

@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?

Asus Prime B350-Plus | Ryzen 7 1800X @ 4.6Ghz | Corsair Vengeance LP 2x8gb 3000Mhz | Asus GTX 1060 6GB |
Samsung 840 250Gb | Geeetech i3x

Trädvy Permalänk
Medlem
Registrerad
Jun 2011

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.

MSI Z77A-GD65 | Intel Core i5 3570K @ 4,2 GHz | Palit Geforce GTX 1070 JetStream | 16 GB Corsair Vengeance 1600 MHz

You must come with me, young ones, for I am the grim reaper.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012
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.

Intel 2500k @ 4.2Ghz | Noctua NH-U14S | ASUS P8Z68-V LX | Fractal Design Define R4 | Corsair XMS3 Vengeance 2x4GB DDR3 1600 Mhz | Gigabyte GTX 970 4GB | Fractal Design Newton R2 650W | Samsung 840 EVO 250GB | Seagate SSHD 1TB | Seagate Barracuda 1 TB | Windows 10

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012
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).

Intel 2500k @ 4.2Ghz | Noctua NH-U14S | ASUS P8Z68-V LX | Fractal Design Define R4 | Corsair XMS3 Vengeance 2x4GB DDR3 1600 Mhz | Gigabyte GTX 970 4GB | Fractal Design Newton R2 650W | Samsung 840 EVO 250GB | Seagate SSHD 1TB | Seagate Barracuda 1 TB | Windows 10

Trädvy Permalänk
Medlem
Registrerad
Jun 2011

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

MSI Z77A-GD65 | Intel Core i5 3570K @ 4,2 GHz | Palit Geforce GTX 1070 JetStream | 16 GB Corsair Vengeance 1600 MHz

You must come with me, young ones, for I am the grim reaper.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012
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å.

Intel 2500k @ 4.2Ghz | Noctua NH-U14S | ASUS P8Z68-V LX | Fractal Design Define R4 | Corsair XMS3 Vengeance 2x4GB DDR3 1600 Mhz | Gigabyte GTX 970 4GB | Fractal Design Newton R2 650W | Samsung 840 EVO 250GB | Seagate SSHD 1TB | Seagate Barracuda 1 TB | Windows 10

Trädvy Permalänk
Medlem
Plats
Långtbortistan
Registrerad
Mar 2007
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

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

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012
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

Intel 2500k @ 4.2Ghz | Noctua NH-U14S | ASUS P8Z68-V LX | Fractal Design Define R4 | Corsair XMS3 Vengeance 2x4GB DDR3 1600 Mhz | Gigabyte GTX 970 4GB | Fractal Design Newton R2 650W | Samsung 840 EVO 250GB | Seagate SSHD 1TB | Seagate Barracuda 1 TB | Windows 10

Trädvy Permalänk
Medlem
Registrerad
Jun 2011

Precis.

Skickades från m.sweclockers.com

MSI Z77A-GD65 | Intel Core i5 3570K @ 4,2 GHz | Palit Geforce GTX 1070 JetStream | 16 GB Corsair Vengeance 1600 MHz

You must come with me, young ones, for I am the grim reaper.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012
Skrivet av L'ombra:

Precis.

Skickades från m.sweclockers.com

Funkar fortfarande inte.

Intel 2500k @ 4.2Ghz | Noctua NH-U14S | ASUS P8Z68-V LX | Fractal Design Define R4 | Corsair XMS3 Vengeance 2x4GB DDR3 1600 Mhz | Gigabyte GTX 970 4GB | Fractal Design Newton R2 650W | Samsung 840 EVO 250GB | Seagate SSHD 1TB | Seagate Barracuda 1 TB | Windows 10

Trädvy Permalänk
Medlem
Registrerad
Jun 2011

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 &

MSI Z77A-GD65 | Intel Core i5 3570K @ 4,2 GHz | Palit Geforce GTX 1070 JetStream | 16 GB Corsair Vengeance 1600 MHz

You must come with me, young ones, for I am the grim reaper.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012
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å?

Intel 2500k @ 4.2Ghz | Noctua NH-U14S | ASUS P8Z68-V LX | Fractal Design Define R4 | Corsair XMS3 Vengeance 2x4GB DDR3 1600 Mhz | Gigabyte GTX 970 4GB | Fractal Design Newton R2 650W | Samsung 840 EVO 250GB | Seagate SSHD 1TB | Seagate Barracuda 1 TB | Windows 10

Trädvy Permalänk
Medlem
Registrerad
Jun 2011
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.

MSI Z77A-GD65 | Intel Core i5 3570K @ 4,2 GHz | Palit Geforce GTX 1070 JetStream | 16 GB Corsair Vengeance 1600 MHz

You must come with me, young ones, for I am the grim reaper.

Trädvy Permalänk
Medlem
Plats
Långtbortistan
Registrerad
Mar 2007

Eller i /var/log/syslog

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

Trädvy Permalänk
Medlem
Plats
Täby
Registrerad
Apr 2009

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...

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012
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

Intel 2500k @ 4.2Ghz | Noctua NH-U14S | ASUS P8Z68-V LX | Fractal Design Define R4 | Corsair XMS3 Vengeance 2x4GB DDR3 1600 Mhz | Gigabyte GTX 970 4GB | Fractal Design Newton R2 650W | Samsung 840 EVO 250GB | Seagate SSHD 1TB | Seagate Barracuda 1 TB | Windows 10

Trädvy Permalänk
Medlem
Registrerad
Jun 2011

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 &

MSI Z77A-GD65 | Intel Core i5 3570K @ 4,2 GHz | Palit Geforce GTX 1070 JetStream | 16 GB Corsair Vengeance 1600 MHz

You must come with me, young ones, for I am the grim reaper.

Trädvy Permalänk
Medlem
Plats
Täby
Registrerad
Apr 2009
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

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012
Skrivet av NoWin:

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

Funkade inte.

Intel 2500k @ 4.2Ghz | Noctua NH-U14S | ASUS P8Z68-V LX | Fractal Design Define R4 | Corsair XMS3 Vengeance 2x4GB DDR3 1600 Mhz | Gigabyte GTX 970 4GB | Fractal Design Newton R2 650W | Samsung 840 EVO 250GB | Seagate SSHD 1TB | Seagate Barracuda 1 TB | Windows 10

Trädvy Permalänk
Medlem
Registrerad
Mar 2016

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...

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012
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.

Intel 2500k @ 4.2Ghz | Noctua NH-U14S | ASUS P8Z68-V LX | Fractal Design Define R4 | Corsair XMS3 Vengeance 2x4GB DDR3 1600 Mhz | Gigabyte GTX 970 4GB | Fractal Design Newton R2 650W | Samsung 840 EVO 250GB | Seagate SSHD 1TB | Seagate Barracuda 1 TB | Windows 10

Trädvy Permalänk
Medlem
Registrerad
Mar 2016

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.

Trädvy Permalänk
Medlem
Registrerad
Aug 2011

@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)

Trädvy Permalänk
Medlem
Registrerad
Mar 2016

@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.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012
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.

Intel 2500k @ 4.2Ghz | Noctua NH-U14S | ASUS P8Z68-V LX | Fractal Design Define R4 | Corsair XMS3 Vengeance 2x4GB DDR3 1600 Mhz | Gigabyte GTX 970 4GB | Fractal Design Newton R2 650W | Samsung 840 EVO 250GB | Seagate SSHD 1TB | Seagate Barracuda 1 TB | Windows 10

Trädvy Permalänk
Medlem
Registrerad
Mar 2016

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.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2012
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!

Intel 2500k @ 4.2Ghz | Noctua NH-U14S | ASUS P8Z68-V LX | Fractal Design Define R4 | Corsair XMS3 Vengeance 2x4GB DDR3 1600 Mhz | Gigabyte GTX 970 4GB | Fractal Design Newton R2 650W | Samsung 840 EVO 250GB | Seagate SSHD 1TB | Seagate Barracuda 1 TB | Windows 10