29

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 Oct 13, 2020 at 20:35
  • 4
    I also get that error message when prepending with sudo while using the --user flag. Oct 13, 2020 at 21:15
  • Du you have libpam-systemd installed?
    – xebeche
    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. Jan 6, 2023 at 16:10

8 Answers 8

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

2
  • 2
    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)
    – Adrien
    Nov 9, 2021 at 12:55
  • 3
    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
    – Dave
    Jan 27, 2022 at 20:30
5

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
3

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 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. 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).
    – tanius
    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?)
    – tanius
    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
    – Václav
    Mar 7, 2023 at 13:13
3

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.
    – Dave
    Oct 21, 2022 at 16:30
  • The only solution that worked, the rest was already ok in systemd Mar 30 at 0:26
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.
    – Community Bot
    Nov 10, 2023 at 10:15
0

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.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .