If you use the Raspbian operating system on your Raspberry Pi you will be aware that when you type startx you launch the graphical user interface “LXDE”. Within this environment there are plenty of applications and utilities. In your projects you may want to auto-load one or more of these applications when you run startx to save you having to launch them manually.
Popular choices might include LXTerminal, Scratch, Midori and Leafpad.
There are two methods you can choose. For most people either one will work but if in doubt use Method 1. In the examples below I’ve added two applications (LXTerminal and Leafpad) but you can add however many you need.
Start by booting your Pi to the command prompt.
Method 1
This method uses a global list of autostart applications that applies to all user accounts. They will load whenever LXDE is loaded regardless of what user is logged in at the time. Usually this user is the default ‘Pi’ account.
Use the following command to launch the nano text editor and edit the autostart file :
sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
Note : The newer Raspbian image changed the folder “LXDE” to “LXDE-pi” so the line above has been updated.
After the last line add a line for each application you wish to autorun. For example if I add lines for LXTerminal and Leafpad my file looks like this :
@lxpanel --profile LXDE @pcmanfm --desktop --profile LXDE @lxterminal @leafpad @xscreensaver -no-splash@
To save and exit the nano editor press CTRL-X, Y and then ENTER. You can use your preferred text editor if nano isn’t your first choice.
Method 2
The alternative method is to create a configuration file that is unique to the currently logged in user. First you need to edit this text file :
sudo nano ~/.config/lxsession/LXDE/autostart
As in Method 1 this file represents a list of commands to be executed when the GUI loads. It is usually blank when you first edit it so just add the applications you need to auto-load:
@lxterminal
@leafpad
To save and exit the nano editor press CTRL-X, Y and then ENTER.
Test
Once your configuration file has been updated you are ready to test.
startx
The LXDE desktop should load and your chosen applications should launch.
Both Methods At The Same Time?
Since v0.4.9 If both files are present, lxsession only executes the local file. This means you can no longer use both methods at the same time. Method 2 will take priority over Method 1.
Auto-run Minecraft
Assuming you have already installed Minecraft on your Pi you can auto-run it as well. When I am in a Python-Minecraft mood I launch Minecraft and a terminal window ready for executing scripts using the following lines :
@~/mcpi/minecraft-pi @lxterminal
This assume the Minecraft executable is located in ~/mcpi/ (same as /home/pi/mcpi/).
Auto-run Python Scripts
You can auto-launch your own Python scripts by adding the line :
@/usr/bin/python /home/pi/example.py
This works best with Method 2 as in this example the Python script is stored in the home directory of the default Pi user. If another user is logged in they wouldn’t have access to this directory so LXDE may not be able to autoload it.
Whichever method you used just type startx from the command line and your chosen applications should load automatically.
Note 1 : The order that you place the application commands doesn’t always mean they will load in that order as different applications will take different amounts of time to load completely. I would tend to put the larger applications first so they have as much time as possible to fire up. i.e. Midori before LXTerminal.
Note 2 : Make sure your commands come before the @xscreensaver line.
33 Comments
Will the python script open in a terminal window or run as a process in the background? I’d like to be able to get a python script that outputs text (generated from sensor outputs) to automatically run in a terminal window. Is there an easy way to accomplish that?
It runs in the background … but you can launch LXTerminal instead and pass it a command line parameter to run a Python script. Haven’t tested it but you could try something like :
@lxterminal -e ‘/usr/bin/python /home/pi/myscript.py’ -t ‘MyTitle’
Much appreciated. I’ll try that.
IMPORTANT: this line has to be added before the @xscreensaver line. Finally worked for me after reading about that here: https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=65607
Thanks, I’ve added a note at the bottom of the post.
Looks like a “code” tag got misplaces in your first snippet above. I’m pretty sure the lines “To save and exit the nano editor press CTRL-X, Y and then ENTER. You can use your preferred text editor if nano isn’t your first choice.” don’t belong in the autostart file. I’m sorry if it sounds picky, but I’ve been fighting the way Wordpad puts tags into posts for about a week now. Thought you’d like to know.
Great site you’ve got here. Thank you for going through the trouble.
Thanks Don. I spotted that just before I published it … then obviously forgot to actually correct it! Thanks for pointing it out. It’s sorted now.
I couldn’t figure out why I couldn’t get this to work.
In the latest raspbian image I downloaded (around Dec 30, 2014) they changed the path for the autostart file that is used.
This in method #1:
sudo nano /etc/xdg/lxsession/LXDE/autostart
is now this:
sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
I hope that saves someone some time.
folder LXDE has changed, Thanks Jeremy!
THANK YOU! This saved me really time!
As Jeremy was saying, with the changes to the new image for Raspbian, it also effect the per user basis. I tried to figure it out for hours why my apps were not auto starter per user and you have to change the folder ~/.config/lxsession/LXDE to ~/.config/lxsession/LXDE-pi for it to work properly. Hopes this helps.
Thanks Jeremy – I am trying to use the user autostart (to start pipresents on startup) and it didn’t work until i created: ~/.config/lxsession/LXDE-pi/autostart
Reading the above I guess this is new – I downloaded and installed NOOBS today, 17th Jan 2015. Hope this helps.
Thanks all,
I was having issues with this as well… I had set the pi to autostart into GUI (thru raspi-config) and all the instructions never made this work!!!
However, figured out that if I disabled the autostart into GUI (via raspi-config) and run the command startx, it started working…
any ideas how to make it boot the pi into GUI and have auto start of an application.
My second issue is that I can now see my python script trying to execute (by running startx manually), but can’t start since input() has an EOF error…
so I basically want to boot to GUI and ready for keyboard input.
Something relatively easy, but has been taking me several days to figure because of all the oddities of Raspian/Pi
Thanks,
-Carlos
Hi Guys,
I am busy with an application that utilises the GPIO and it needs root priviliges, but I want it to auto start on boot.
Do I need something extra, as on the command line ‘sudo’?
I usually have to open the current folder as root and then I can start my application by double clicking.
The above code doesn’t start my application up.
Thanks.
I used the following command to change the file ownership to pi and switch back to root afterward.
chown pi:pi [filename]
Howard, I am not quite with you? I have since also upgraded to the Rpi 2B, but still having trouble starting my app.
Now on the Rpi 2B I cant switch a window to root user, the option was removed. So my app doesn’t even start on normal double click anymore. It only runs if I remove gpio references from the code.
How do I run a GUI with GPIO (root privileges) on Rpi 2B and more especially how can I autostart the app. I changed the file ownership to root, still doesnt work.
I too have been battling this on a RPI2 running Rasbian. My app uses GPIO and tkinter so I need X running. My intention is to auto boot to desktop and then for my application to launch covering the OS like a virtual machine. Strange behavior is that after locating the path .config/lxsession/LXDE-pi/ and creating my autostart file my python program will auto launch about 50% of the time on boot. I have not been able to determine why it will not the other times? I hope that someone can finally put a nail in this, I am dead in the water with this project until I can get 100% autostart to work. Thanks for all the input.
Henry
Finally, I think that I have got autostart to work 100% of the time.
I had to modify my autostart file in
/etc/xdg/lxsession/LXDE-pi/autostart
to read:
@/usr/bin/python3.2/myscript.py
myscript.py resides in home/pi
I added python3.2 for it to work, apparently it was trying to run my python3 script with python2 even though the shebang statement at the top of the script calls for python3. I am a linux noob so any insight on why this works would be appreciated.
Henry
Hi,
I have installed the raspbian using Noobs and Tried the Autostart steps given below.
nano /etc/xdg/lxsession/LXDE-pi/autostart
Added @lxterminal
then rebooted the system my system boots automatically without login in Pi user but it does not open the terminal automatically.
Then I open it manually and done the startx on terminal.
It opens the terminal automatically .
But next time when I putted a reboot command & reboot my system ,it asked me a login ID and password on GUI to login to Raspnerry pi .
I tried to login using username pi and password raspberry ,but I am not able to login to the session.
Please suggest the solution why i am not able to login to PI & also I want it to Login automatically in LXDE session without asking user and password.
I have tried it by chnaging the pi password and login with the new password still it not worked.
Also I have added a new test user and tried the same steps .
nano /etc/xdg/lxsession/LXDE-pi/autostart
Added @lxterminal
now it able to login with my new username and password .But I want to login to this session automatically & open the terminal.
I tried the rasp-config but not worked .
Please suggest solution .
Thanks.
I just put the commands I needed to autorun into the users .profile in their home directory. Worked like a champ.
Is it possible to have multiple python scripts set to run at the start up of the GUI? I have tried just adding in another @/usr/bin/python /home/pi/example.py line to the autostart file but it doesn’t run the second python script
I was having issues trying to get the R Pi2 to launch a website on boot I ended up making the change to this config file to make it work
sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart
It worked like a charm. I had a hard time finding this solution and i hope it helps others.
Frank thank you spent hours and hours looking for this solution, editing
sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart
Worked perfect!
THANKS!!!!
I’ve modified /home/pi/.config/lxsession/LXDE-pi/autostart adding @xfreerdp server1 to automatically start a RDP session to a terminal server. It works perfectly if I manually login as pi but as soon as I reconfigure it to automatically login as pi into the desktop it stops working. If I add @leafpad to the autostart file it works but not the @xfreerdp Any suggestions?
Hi, first thank you for the tutorial. it works perfect to start a terminal.
Do this
sudo sed /etc/lightdm/lightdm.conf -i -e “s/^autologin-user=.*/autologin-user=root/”
and you will be root after login as pi to LXDE.
After you can put all scripts you need in .bashrc from root.
regards from rainy Germany
Klaus Werner
This thread has been very helpful – thanks to all the contributors.
I have a question: I added a line to start an lxterminal to run my program, and it works. However, my program accesses a Sense Hat, and it needs to start with sudo to run properly. Is there a way to specify the user password in the autostart line so that it doesn’t need to be entered? I’m developing an application that would be better off without a keyboard.
Thanks!
Annonyingly I took me 2 days to figure out that method 1 no longer works.
https://wiki.archlinux.org/index.php/LXDE#Autostart
“Note: If both files are present, lxsession only executes the local file as of v0.4.9”
Method should work as long as there are no local files defined. Thanks for the tip, I’ve modified the article to mention the local file take priority over the global file.
I have a small problem. I want to autostart two programs and of cause it works with mentioned method no.1. The problem is, I want to start them in two different virtuell desktops, unfortunately both programs are starting only on one desktop and I really do not find a way to start on the defined desktops. Any idea?
THANK YOU
I have been trying to find a way to get this to work, and i’ve seen other tutorials like this, but only using method 1 and I could never get it to work. Method 2 worked perfectly for me.
Thank you again!
Can I run a shell file placed on Desktop on reboot?? How to do that?
The second method worked for me, but it boots my kivy app vertically as opposed to horizontally. Is anyone else getting this problem? Any help would be much appreciated.
I just found the solution. If this happens to you instead of typing:
@/usr/bin/python /home/pi/example.py
Type instead:
@sudo python example.py
like you would in the terminal.