如何配置让会话DBUS默认使用/run目录存放套接字?
如何配置让会话DBUS默认使用/run目录存放套接字?
我来给你几个可行的解决方案,都是实际操作过能生效的,帮你解决沙箱程序无法访问/tmp下DBus套接字的问题:
修改全局DBus会话配置(需管理员权限)
你已经注意到全局配置文件/usr/share/dbus-1/session.conf里的tmpdir=/tmp是关键,直接修改它就能全局生效:- 先备份原文件,防止改坏了没法恢复:
sudo cp /usr/share/dbus-1/session.conf /usr/share/dbus-1/session.conf.bak - 用编辑器打开配置文件(比如nano):
sudo nano /usr/share/dbus-1/session.conf - 找到
<listen>unix:tmpdir=/tmp</listen>这一行,把它替换成:
这里的<listen>unix:path=/run/user/%u/bus</listen>%u是DBus的变量,会自动替换成当前用户的UID,比如你的1000。 - 保存退出后,下次用
dbus-launch启动会话时,套接字就会自动生成在/run/user/$UID目录下了。
小提醒:系统更新DBus的时候可能会覆盖这个配置文件,要是怕被覆盖,优先用下面的用户本地配置方法。
- 先备份原文件,防止改坏了没法恢复:
使用用户本地配置覆盖全局设置
这种方法只对你自己的用户生效,不会影响系统里的其他用户,也不用担心系统更新覆盖配置:- 先创建用户专属的DBus配置目录:
mkdir -p ~/.config/dbus-1 - 在这个目录下创建
session.conf文件,写入以下内容(可以直接复制全局配置的内容再修改listen行,这里给了基础模板):<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig> <listen>unix:path=/run/user/%u/bus</listen> <auth>EXTERNAL</auth> <auth>DBUS_COOKIE_SHA1</auth> <auth>ANONYMOUS</auth> <allow_anonymous/> </busconfig> - 保存文件后,下次启动
dbus-launch时,会优先读取你本地的这个配置,套接字就会生成在/run/user/$UID目录下了。
- 先创建用户专属的DBus配置目录:
临时指定或通过环境变量设置
要是不想改配置文件,也可以用临时命令或者环境变量来指定:- 临时启动时指定:直接在命令行给
dbus-launch加参数:dbus-launch --address="unix:path=/run/user/$(id -u)/bus" - 永久设置环境变量:在你的shell配置文件(比如
~/.bashrc、~/.zshrc)里添加一行:
之后每次登录shell,启动DBus会话时都会自动使用这个路径。export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"
注意:/run/user/$UID目录一般系统会自动为登录用户创建,权限是用户专属的,只要沙箱程序能访问这个目录就没问题。
- 临时启动时指定:直接在命令行给
备注:内容来源于stack exchange,提问作者allo
相关产品推荐
相关产品推荐

