26

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.

Thank you for help!

Bevor
  • 319
  • 5
  • 24
Alexandre Sandolo
  • 361
  • 1
  • 3
  • 6

6 Answers6

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

Roger Dueck
  • 465
  • 4
  • 6
  • 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 09 '21 at 12:55
  • 2
    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 '22 at 20:30
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.

  • 1
    Pam is already on – Alexandre Sandolo Jun 16 '20 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. – Jürgen Hötzel Jun 17 '20 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 '20 at 01: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 '20 at 01: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 07 '23 at 13:13
3

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

Pielo
  • 31
  • 3
  • How is this better than other answers? – Toto Jan 04 '22 at 15:46
  • This does not provide an answer to the question. Once you have sufficient [reputation](https://superuser.com/help/whats-reputation) you will be able to [comment on any post](https://superuser.com/help/privileges/comment); instead, [provide answers that don't require clarification from the asker](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can-i-do-instead). - [From Review](/review/late-answers/1100681) – Dave M Jan 04 '22 at 15:51
  • 1
    @Toto : other solutions did not work for me. This is the only solution that worked. – Pielo Jan 05 '22 at 17:19
2

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

dobrinov
  • 101
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.

jcomeau_ictx
  • 819
  • 10
  • 15