38

When I run this commande in my Debian 9 VPS : systemctl --user I have this following error : Failed to connect to bus: No such file or directory

This error appear on all users except the user root.

I already have the dbus dbus-user-session systemd libsystemd-dev libsystemd

This is my env :

USER=web LOGNAME=web HOME=/home/web PATH=/usr/local/bin:/usr/bin:/bin:/usr/games MAIL=/var/mail/web SHELL=/bin/zsh SSH_CLIENT=[CENSORED] 23459 22 SSH_CONNECTION=[CENSORED] 23459 [CENSORED] 22 SSH_TTY=/dev/pts/0 TERM=xterm XDG_SESSION_ID=1824414 XDG_RUNTIME_DIR=/run/user/1000 SHLVL=1 PWD=/home/web OLDPWD=/home/web LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36: 

I can't find a solution in the 3 first page of searching in Google.

4
  • 1
    I had that problem and solved it by installing openssh-server, then rebooting Commented Oct 13, 2020 at 20:35
  • 4
    I also get that error message when prepending with sudo while using the --user flag. Commented Oct 13, 2020 at 21:15
  • Du you have libpam-systemd installed? Commented Mar 24, 2021 at 23:21
  • 1
    Thank you @CraigHicks that was the clue I needed. I was seeing this error from Ansible when trying to install a user service in systemd. Turns out I had become: yes in the task. Removing it fixed the problem. Commented Jan 6, 2023 at 16:10

9 Answers 9

65
  1. There must be a /lib/systemd/systemd --user process for the user you're running this for. Check with: ps aux | grep systemd. In my case the process didn't exist because I was trying to setup background services on another account, and that user wasn't logged in (the systemd --user process is normally launched at login). The solution was to run sudo loginctl enable-linger $otherUser, which keeps the systemd --user process running at all times.

  2. XDG_RUNTIME_DIR must be set. In my case it wasn't, so my command had to be sudo -u $otherUser XDG_RUNTIME_DIR=/run/user/$(id -u $otherUser) systemctl --user.

5
  • 4
    A year later, and this is still valid. Thanks! I was not affected by the first point but I was by the second one. (Running Ubuntu 20.04) Commented Nov 9, 2021 at 12:55
  • 4
    Main problem was linger for me. It was never clear that if said user LOGS OFF, all systemd --user services wills top automatically by default. To keep them running even with the user logs off, enable linger as the user. Check linger status loginctl show-user yourusername | grep Linger, enable it loginctl enable-linger yourusername Commented Jan 27, 2022 at 20:30
  • 1
    In my case, the linger was disabled for my user and my service running on a cloud environment would stop arbitrarily. Enabling it solved the issue. Commented May 29, 2024 at 2:08
  • 3
    It was the second point for me even when I was running systemctl for my own user. The XDG_RUNTIME_DIR variable was blank. Added export XDG_RUNTIME_DIR=/run/user/$(id -u $USER) to my .bashrc file for persistence. Commented Jun 10, 2024 at 5:41
  • 1
    loginctl enable-linger $USER Commented Jul 19 at 6:44
10

I faced the same issue recently. The fact is that service systemd-logind was not started.

Starting following service did the trick:

sudo service systemd-logind start 
3
6

This is how I resolved it:

echo $DBUS_SESSION_BUS_ADDRESS unix:path=/run/user/0/bus 

Then in my script,

export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/0/bus" systemctl --user restart my-service 
2
  • 1
    Did not work, get the same error. Commented Oct 21, 2022 at 16:30
  • The only solution that worked, the rest was already ok in systemd Commented Mar 30, 2024 at 0:26
5

Most likely you have forgotten to enable pam in the openssh configuration?

grep UsePAM /etc/ssh/sshd_config UsePAM yes 

The part responsible for starting the user session is pam_systemd:

grep -R systemd /etc/pam.d/system-login -session optional pam_systemd.so debug 

If you habe enabled debugging (debug pam option). You should see debug messages like:

$ journalctl -u sshd -g pam_systemd Jun 17 17:41:05 shaun sshd[3575212]: pam_systemd(sshd:session): pam-systemd initializing Jun 17 17:41:05 shaun sshd[3575212]: pam_systemd(sshd:session): Asking logind to create session: uid=1000 pid=3575212 service=sshd type=tty class=user desktop= seat= vtnr=0 tty= display= remote=yes remote_user= remote_host=192.168.178.34 

logind starts your user instance.

5
  • 1
    Pam is already on Commented Jun 16, 2020 at 21:48
  • I added the pam debug option to the original answer. So you can check what is going on in the system journal. Commented Jun 17, 2020 at 15:51
  • 2
    /etc/pam.d/system-login might also be found at /etc/pam.d/systemd-user (Ubuntu 18.04 LTS here). Commented Jun 19, 2020 at 1:44
  • (And I think there's a tiny mistake in your answer: in the second code block, -session should be just session, no?) Commented Jun 19, 2020 at 1:48
  • This answer is close to solution, but it lacks explanations as to why to look into PAM at all, as well as what to do to fix the issue. The solution is on this page: https://unix.stackexchange.com/questions/587674/systemd-not-detected-dockerd-daemon-needs-to-be-started-manually I suggest people start with @Dojo answer, and if it won't be enough, then try @griffinht and of course this answer by @Jürgen as part of debugging. But first of all, the @Craig comment on this answer is the prerequisite of the solution - yes, one needs to install openssh-server first, then reboot Commented Mar 7, 2023 at 13:13
1

I had the same error (Failed to connect to bus: No such file or directory) when running the following command on Ubuntu 20.04:

systemctl --user mask tracker-store.service tracker-miner-fs.service tracker-miner-rss.service tracker-extract.service tracker-miner-apps.service tracker-writeback.service

The problem was because of the alias:

alias systemctl='sudo systemctl'

It substituted the systemctl with sudo systemctl and sudo caused the error.

0

Had the same problem. All environment variables were set correctly. Then I listed the /run/user/$UID directory and found that the bus socket was owned by root and not by my user. Deleting the file and rebooting the system re-created the file with the correct permissions and this resolved the problem for me.

0

I had this problem running systemctl --user stop bitcoind from a cron job, via a Makefile in $HOME/.bitcoin. Using the answers above, I set and exported XDG_RUNTIME_DIR and DBUS_SESSION_BUS_ADDRESS, and it now works. Perhaps only one or the other was necessary, but without running strace from the cron job I didn't know which file or directory it was failing to find.

0

Dobrinov's answer helped me to find the answer. I have set $DBUS_SESSION_BUS_ADDRESS to /run/user/$UID/bus then it worked.

1
  • 1
    As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center. Commented Nov 10, 2023 at 10:15
0

The error message

Failed to connect to bus: No such file or directory 

indicates that you don't have a proper login session.

To start a new login session, run the command

sudo machinectl shell --uid=myuser 

or

sudo machinectl shell myuser@ 

(The commands do the same thing)

Alternatively, you could log in over ssh to localhost.

ssh myuser@localhost 

Note, lingering is not needed. In other words, there is no need to run the command

sudo loginctl enable-linger myuser 

If you want to run systemctl --user status without having to start an interactive login session, run

sudo systemctl --user -M myuser@ status 

See also Lennart Poettering's github commment that explains why su should not be used for starting a new login session.

In other words, do not use

sudo su -i 

to start a new login session.

See also https://unix.stackexchange.com/a/730141/9360

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.