systemd Linux

Linux: Failed to connect to bus: No such file or directory

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

Ошибка Failed to connect to bus: No such file or directory возникает, когда у пользовательской сессии нет доступа к шине D-Bus или переменных XDG_RUNTIME_DIR и DBUS_SESSION_BUS_ADDRESS. Это типично для su, ssh без сессии, cron, контейнеров и WSL; решается входом через машину с сессией или установкой переменных.

В этой статье
  1. Откуда берётся ошибка
  2. Типичные сценарии
  3. Диагностика
Failed to connect to bus
Failed to connect to bus: No such file or directory
По-русскиsystemctl --user или другая утилита не нашла сокет D-Bus.

#Откуда берётся ошибка

Команды systemctl --user, loginctl, busctl, gsettings и многие графические утилиты общаются с шиной D-Bus через сокет. Для пользовательской сессии он лежит в /run/user/<UID>/bus, а путь передаётся переменными окружения XDG_RUNTIME_DIR и DBUS_SESSION_BUS_ADDRESS. Если пользователь вошёл не через полноценную сессию, например через su без -l, sudo -u, cron, ssh с отключённым PAM, контейнер или WSL без systemd, каталог /run/user/<UID> отсутствует либо переменные не заданы. Отсюда No such file or directory.

#Типичные сценарии

Возможная причинаКак узнатьЧто делать
su или sudo -u без сессииНет окружения пользователя.Переменные пусты.Используйте sudo -iu пользователь или machinectl shell пользователь@.
ssh без PAM-сессииОтключён UsePAM.Нет каталога /run/user.Включите UsePAM yes в sshd_config и перезапустите sshd.
cron или скриптНет сессии.Скрипт падает по cron, а руками работает.Задайте переменные в начале скрипта или используйте системную службу вместо пользовательской.
Docker-контейнерНет systemd внутри.PID 1 не systemd.Запускайте службы командой напрямую или используйте образ с systemd.
WSLНет systemd.PID 1 — init.Включите systemd в /etc/wsl.conf: [boot] и systemd=true, затем wsl --shutdown.
Сессия закрытаСлужба пользователя остановлена после выхода.После выхода сервисы пропали.loginctl enable-linger.

#Диагностика

  1. Проверьте переменныеВ терминале Linux выполните id -u, echo "$XDG_RUNTIME_DIR" и echo "$DBUS_SESSION_BUS_ADDRESS". Ошибка Failed to connect to bus часто относится к systemctl --user, запущенному без настоящей пользовательской сессии; сначала уточните, использована ли команда с --user, под sudo или внутри контейнера.
  2. Проверьте, существует ли сокетДля обычной пользовательской сессии проверьте ls -ld /run/user/$(id -u) и наличие сокета /run/user/$(id -u)/bus. Если каталог или сокет отсутствует, не создавайте их вручную и не назначайте всем права 777: их обычно создаёт менеджер пользовательских сессий systemd/logind.
  3. Проверьте, запущен ли systemdВыполните ps -p 1 -o comm= и systemctl --version. Если PID 1 не systemd (например, контейнер без systemd или WSL без соответствующей настройки), systemctl не сможет управлять сервисами как на обычном хосте. Используйте способ запуска служб, предусмотренный именно этой средой.
  4. Проверьте, есть ли сессияКомандой loginctl list-sessions проверьте, есть ли ваша пользовательская сессия, и посмотрите loginctl user-status имя_пользователя. Вход через sudo -u не всегда создаёт полноценную logind-сессию, поэтому systemctl --user может не найти шину. Попробуйте войти обычным SSH под нужным пользователем.
  5. Определите способ входаДля пользовательских служб используйте учётную запись их владельца, а для системных — sudo systemctl status имя.service без --user. Временное export XDG_RUNTIME_DIR=... не создаст отсутствующий сокет и может привести к подключению к чужой шине; для постоянной фоновой службы настройку linger согласуйте с администратором системы.
  6. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Переменные окружения, UID и каталог выполнения
    Linux · Терминал (Bash)Команда
    Переменные окружения, UID и каталог выполнения
    id -u
    echo "XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR"
    echo "DBUS=$DBUS_SESSION_BUS_ADDRESS"
    ls -ld /run/user/$(id -u)
    Вариант 2Что работает как PID 1 и есть ли сессии
    Linux · Терминал (Bash)Команда
    Что работает как PID 1 и есть ли сессии
    ps -p 1 -o comm=
    loginctl list-sessions
    Вариант 3Временно задать переменные в своей оболочке (если сокет /run/user/UID/bus существует)
    Linux · Терминал (Bash)Команда
    Временно задать переменные в своей оболочке (если сокет /run/user/UID/bus существует)
    export XDG_RUNTIME_DIR=/run/user/$(id -u)
    export DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus
    systemctl --user status
    Вариант 4Запустить пользовательский менеджер службы для пользователя, который не входил в систему (замените имя)
    Linux · Терминал (Bash)КомандаНужен sudo
    Запустить пользовательский менеджер службы для пользователя, который не входил в систему (замените имя)
    loginctl user-status username
    # enable-linger меняет запуск пользовательских служб после выхода; не включайте без необходимости.
    Вариант 5Выполнить пользовательскую команду systemctl от root для другого пользователя
    Linux · Терминал (Bash)КомандаНужен sudo
    Выполнить пользовательскую команду systemctl от root для другого пользователя
    sudo systemctl --user -M username@ status
    Вариант 6Включить systemd в WSL2 (Windows 11 / современный WSL), после чего выполните в PowerShell wsl --shutdown
    /etc/wsl.conf
    Включить systemd в WSL2 (Windows 11 / современный WSL), после чего выполните в PowerShell wsl --shutdown
    [boot]
    systemd=true

Если вам нужна системная, а не пользовательская служба, запускайте команды без --user и с sudo: sudo systemctl status имя. Для пользовательских служб в контейнерах или на серверах без сессии надёжнее оформить их как системные юниты с параметром User= в файле службы.

Так эту ошибку тоже называют

Источники и обновления

  • systemctlfreedesktop.org/software/systemd/man/latest/systemctl.html
  • D-Busfreedesktop.org/wiki/Software/dbus

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.