Arch-Linux

為什麼帶有 systemd dbus 的 gvfs 會超時?

  • November 16, 2016

我在 Arch Linux 上執行 systemd-231。

當我登錄時,systemd 啟動了一個 dbus,但 gvfs 與該 dbus 互動似乎存在一些問題。如果我在終端中啟動 dbus,新的 dbus 似乎工作正常。

» systemctl --user status dbus.service
● dbus.service - D-Bus User Message Bus
  Loaded: loaded (/usr/lib/systemd/user/dbus.service; static; vendor preset: enabled)
  Active: active (running) since Mon 2016-09-05 20:51:05 BST; 40min ago
    Docs: man:dbus-daemon(1)
Main PID: 3188 (dbus-daemon)
  CGroup: /user.slice/user-1034.slice/user@1034.service/dbus.service
          ├─3188 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation
          └─3288 /usr/lib/GConf/gconfd-2

Sep 05 21:17:50 a-host dbus-daemon[3188]: Failed to activate service 'org.gtk.vfs.Daemon': timed out
Sep 05 21:17:50 a-host dbus-daemon[3188]: Failed to activate service'org.freedesktop.systemd1': timed out

對 gvfs 的呼叫似乎受到 gvfs-daemon 超時的影響。

例如

» gvfs-ls /tmp    # long wait before output

(gvfs-ls:12745): GVFS-WARNING **: Error creating proxy: Error calling StartServiceByName for org.gtk.vfs.Daemon: Timeout was reached (g-io-error-quark, 24)

systemd-private-0c85dfd7446c421ba74be6bfb562fc0e-systemd-timesyncd.service-8EY8dZ

D-Bus 地址似乎設置正確:

» echo $DBUS_SESSION_BUS_ADDRESS
unix:path=/run/user/1034/bus

如果我在終端中啟動一個 dbus,該 dbus 似乎能夠啟動各種 gvfs 服務並且我沒有超時:

» eval `dbus-launch --sh-syntax`

» echo $DBUS_SESSION_BUS_ADDRESS
unix:abstract=/tmp/dbus-iDDJAPUedN,guid=073a15321e1588b8db0a42f057cdd80d

» gvfs-ls /tmp # runs instantly
systemd-private-0c85dfd7446c421ba74be6bfb562fc0e-systemd-timesyncd.service-8EY8dZ

為什麼 dbus 不能使用 systemd dbus 正確啟動?

這是由於存在/etc/systemd/system/user@.service.d/dbus.conf覆蓋user@.servicefrom的“標準”定義的“插入式”文件,/usr/lib/systemd/system特別是更改了DBUS_SESSION_BUS_ADDRESS

該插入文件是如何到達那裡的仍然是一個謎。根據pacman -Qo它不屬於任何包裹。我假設某些軟體包添加了它,然後在後續更新中沒有正確刪除它。沒有把握。

刪除/etc/systemd/system/user@.service.d/dbus.conf文件後,一切似乎都正常。

引用自:https://unix.stackexchange.com/questions/308036