When I enter my password on the login-screen, the screen goes black for a couple of seconds before it returns to the login-screen. I.e. login loop.

I can log-in through remote desktop and SSH (puTTy).

Before the login-loop started to occured, I added an alias to bash_rc and a path to .profile. I suspected this to be the cause of the problem, so I overwrote the changes with the files from etc/skel.

Now my .profile looks like this:

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

    # if running bash
    if [ -n "$BASH_VERSION" ]; then
        # include .bashrc if it exists
        if [ -f "$HOME/.bashrc" ]; then
            . "$HOME/.bashrc"
    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/.local/bin" ] ; then

My bash rc looks like this:

# ~/.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;;

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

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

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

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

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

# 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

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

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

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

# 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'

# 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

# 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

When logging in to putty i get the error message:

Command 'lesspipe' is available in the following places
 * /bin/lesspipe
 * /usr/bin/lesspipe
The command could not be located because '/bin:/usr/bin' is not included in the                                                                                                                                                                              PATH environment variable.
lesspipe: command not found
Command 'dircolors' is available in '/usr/bin/dircolors'
The command could not be located because '/usr/bin' is not included in the PATH                                                                                                                                                                              environment variable.

so i paste:


into terminal and commands like ls work again. It's strange that i don't get this error in tty3 or remote desktop. But I do get it in putty and the root shell when i boot into safe mode. Does this make sense to anyone?

my etc/environment looks like this


I have spend two day on this now, any help and tips will be appreciated :)

I have tried the typically suggested solutions for the login-loop:

  • XAuthority & ICEAuthority
  • updating NVIDIA drivers
  • Welcome to AskUbuntu. I read your question three times and I still don't get it. What are you trying to accomplish? Are the .bashrc and .profiles you posted the same as the ones in /etc/skel? You said you have restored them, overwriting your changes. Are you having problems with the 'stock' versions?
    – Adriaan
    Sep 23, 2020 at 16:14
  • Hi Adriaan. I suspected that the login loop was related to me messing around in .profile and bashrc so i restored them from /etc/skel, and these are the ones I've posted here. So yes, I guess I'm having trouble with the stock ones.
    – Vegar
    Sep 23, 2020 at 16:45
  • I also thought that the fact that usr/bin seems to be incorrectly set when using putty and root shell, but working when using tty3 could be related to my login loop problem. Maybe these use the same shell or something that the login procedure uses?
    – Vegar
    Sep 23, 2020 at 16:53

1 Answer 1


I found the problem. It was a problem I created myself, but the solution might be useful for other linux noobs like me:

I found out there's a log of all bash commands that have been run. To access it, open tty3 with Ctrl+Alt+F3, login and type:

vim ~/.bash_history

Here i saw that I had messed around with some stuff that I had forgotten about. Among other things I had created pam_environment, and added an alias to a program I had installed. I must have had wrong syntax or something, because removing the file made me able to log in again.

rm ~/.pam_environment

Now exit tty3 with Ctrl+Alt+F1 and log in.


How to open ~/.pam_environment?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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