1

I am trying make a program run on startup[switching on] and some ppl suggested me to use .bashrc This used to work until a few days now it just works when I open a console

It doesn't work when I switch on the system

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # We have color support; assume it's compliant with Ecma-48
    # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
    # a case would tend to support setf rather than setaf.)
    color_prompt=yes
    else
    color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

sudo python3 python1.py 

this python1.py is directly located in the homefolder itself

3 Answers 3

8

I am trying make a program run on startup[switching on] and some ppl suggested me to use .bashrc

Do not listen to these people ever again with regard to operating system tasks on the Raspberry Pi. They are very, very wrong; this is a clue that someone knows almost nothing they are talking about.

Another clue to this is actually at the top of the file, which evidently your friends did not bother to read:

# ~/.bashrc: executed by bash(1) for non-login shells.

That does not say "executed by the system at boot". To someone with even rudimentary knowledge of how linux and similar systems work, this is not a mysterious statement.1 The manual page for bash restates this in the INVOCATION section (you can read it on the pi via man bash):

When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists.

An "interactive shell" is what you are using at the command prompt; this is actually the shell's prompt. "A login shell" is "one started with the --login option". This option is used if you log in on the console. It may or may not be used if you log in via GUI. However, it is common practice, including on Raspbian, for a file which is used by login shells (~/.profile) to source ~/.bashrc.

Okay so what?

What that means is .bashrc is run every time an interactive shell is started. Using it for things you want to run at boot is a bad idea because:

  • There is no reason to assume an interactive shell will be started at boot, and a few reasons to believe it isn't, namely, someone has to log in first.2 Hence, what you wanted to happen at boot is likely not to happen.
  • Even worse, what you wanted to happen at boot is probably not something you want to happen every time you, eg., open a GUI terminal, but it will if you put it in .bashrc.

  1. Demonstrating again that people who spread this idea do not possess even rudimentary knowledge of the operating system.

  2. Which has to do with why the idea persists; on the Pi it is common to use auto-login for the pi user, giving people the mistaken impression .bashrc is supposed to be executed at boot.

4
  • 2
    "Do not listen to these people ever again" - upvote for that alone :p Sep 10, 2019 at 21:26
  • I understant all that but it used to work previously...
    – user107957
    Sep 13, 2019 at 5:27
  • any other way of making it possible
    – user107957
    Sep 13, 2019 at 5:27
  • Depends what it is. If it is a background thing, use /etc/rc.local or a systemd service. If it is a foreground GUI thing, you probably want to look into using autologin and the DE autostart file. These are all things you can google and there are probably hundreds of Q & As about them here. Just avoid the answers that mention .bashrc (or .profile) -- that is the worst solution that still has some chance of working.
    – goldilocks
    Sep 13, 2019 at 13:51
2

If you want to run a script at startup, you can add the command to the ~/.config/lxsession/LXDE/autostart file. Use nano to edit the file under your current user. Don't use sudo nano.

The file should run provided your script has necessary permissions. You can give permissions and make it an executable file by running chmod 755 [FILENAME] or chmod +X [FILENAME]

2
  • Mine doesnt have a folder called lxsession in .config
    – user107957
    Sep 13, 2019 at 5:26
  • 1
    Try find $HOME -name "*autostart*" <- Exactly like that, double quotes and asterisks.
    – goldilocks
    Sep 13, 2019 at 13:52
-1

It is possible to ensure that .bashrc is run at startup, if you also configure an auto-login. Try: Auto Login

However, another solution is to configure an /etc/rc.local. See rc.local scripts

I have implemented this myself on an Rpi, but cannot remember which of these methods I used.

1
  • Please take note that using /etc/rc.local has limitations due to Compatibility with SysV. We have seen many problems here on this site using it. Following the recommendation of the developers from systemd you should avoid using it.
    – Ingo
    Sep 11, 2019 at 7:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.