Failed to connect to bus: подключение к шине недоступно
Сообщение «Failed to connect to bus» означает, что systemctl не может обратиться к менеджеру через шину. Причина зависит от места: в контейнере менеджера может не быть вовсе, в сеансе по ssh нет пользовательской шины, а у службы нет нужных переменных окружения.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Команда для менеджера пользователя выполняется без сеанса
Ключ пользователя требует работающего менеджера пользователя и переменной с адресом шины. В сеансе через ssh или в скрипте их может не быть.
-
Контейнер без systemd
В контейнерах с одним процессом менеджера нет. Команды systemctl там работать не будут по определению.
-
Служба шины не запущена
Без dbus-broker или dbus-daemon часть операций systemd недоступна. На обычных системах это авария.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Кто первый процесс: systemd или что-то другое.
ps -p 1 -o comm=Состояние службы шины.
systemctl status dbus --no-pager | head -6Каталог времени работы: нужен для команд менеджера пользователя.
echo "$XDG_RUNTIME_DIR"Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Ключ пользователя требует работающего менеджера пользователя и переменной с адресом шины. В сеансе через ssh или в скрипте их может не быть.
- Как проверить
-
Посмотрите переменные и наличие менеджера.
echo "$XDG_RUNTIME_DIR $DBUS_SESSION_BUS_ADDRESS" systemctl --user status 2>&1 | head -3
- Как исправить
-
Задайте переменную с каталогом времени работы для нужного пользователя либо выполняйте команду через вход в сеанс. Для постоянной работы служб пользователя разрешите задержку сеанса.
sudo loginctl enable-linger пользователь
- Почему происходит
- В контейнерах с одним процессом менеджера нет. Команды systemctl там работать не будут по определению.
- Как проверить
-
Проверьте, есть ли менеджер как первый процесс.
ps -p 1 -o comm= systemd-detect-virt --container 2>/dev/null
- Как исправить
- Управляйте процессом средствами среды исполнения контейнеров. Запускать systemd в контейнере имеет смысл только при явной необходимости.
- Почему происходит
- Без dbus-broker или dbus-daemon часть операций systemd недоступна. На обычных системах это авария.
- Как проверить
-
Посмотрите состояние службы шины.
systemctl status dbus.service --no-pager | head -6
- Как исправить
- Запустите службу шины и разберитесь, почему она не работала: без неё многое в системе не функционирует.
Пример вывода
Команда менеджера пользователя без сеанса. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ systemctl --user status
Failed to connect to bus: No medium found
$ echo $XDG_RUNTIME_DIR
(пусто)
Связанные ошибки
- Служба пользователя не запускается или не переживает выход systemctl --user: служба останавливается при выходе из системы. Разбор lingering и отличий от системных служб.
- Interactive authentication required при управлении службой systemctl требует аутентификации: обращение от непривилегированного пользователя через polkit. Как разрешить точечно.
- Function not implemented в контейнере Ошибка 38 при системном вызове: вызов запрещён фильтром или отсутствует в окружении. Разбор для контейнеров.
- status=219/CGROUP в systemd Код 219/CGROUP: не удалось создать или настроить контрольную группу службы. Причины на уровне системы и контейнеров.
- status=225/NETWORK в systemd Код 225/NETWORK: не удалось создать сетевое пространство имён для службы при PrivateNetwork=yes или NetworkNamespacePath=.
- status=237/KEYRING в systemd Код 237/KEYRING: не удалось подготовить связку ключей ядра для службы. Обычно ограничение окружения или исчерпание квоты.
- В журнале контейнера видны записи хоста Журнал внутри контейнера показывает не то, что ожидалось: каталог журнала хоста проброшен внутрь.
- Журналы контейнеров заполнили диск Место кончилось из-за журналов контейнеров: ограничение размера не задано, ротации нет.
Источники
-
systemctl(1)
Ключ --user и требования к сеансу. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено в контейнере без systemd и в сеансе ssh без каталога времени работы.