ip netns exec 无法仅启动 mate-terminal 和 gnome-terminal?

ip netns exec 无法仅启动 mate-terminal 和 gnome-terminal?

我正在使用newns这里的脚本:

https://superuser.com/questions/983727/route-only-specific-traffic-through-vpn

...除了在此系统上:

$ mate-about -v
MATE Desktop Environment 1.24.0

$ cat /etc/issue
Ubuntu 20.04.2 LTS \n \l

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:    20.04
Codename:   focal

所以,问题是,我已经export XTERM=/usr/bin/mate-terminal在该脚本中进行了更改,当我newns MYNS start重新启动后立即运行时,“命名空间”终端运行良好;然后我运行newns MYNS stop,“命名空间”终端被关闭 - 一切都很好,一切都如预期。

但后来,当我想要重复该过程 - 终端不再启动,但也没有错误?!我最终将其简化为这一行(创建网络命名空间 MYNS 后):

$ sudo /usr/bin/ip netns exec MYNS su -c /usr/bin/mate-terminal myusername

(mate-terminal:12410): dbind-WARNING **: 17:33:10.398: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-pRWfI7rzyW: Connection refused

每隔一段时间,它可能运行一次,但 99% 的情况下,重新运行此命令不会产生任何结果。

这是有趣的部分 - 如果我在上面的命令行中替换mate-terminal为:xterm

sudo /usr/bin/ip netns exec MYNS su -c /usr/bin/xterm myusername

... 有用每次!但我不想使用xterm- 我需要一个带有选项卡的终端......

只是为了好玩,我也尝试在这里运行 VLC:

sudo /usr/bin/ip netns exec MYNS su -c /usr/bin/vlc myusername

...并且至少它开始得很好(尽管它抱怨“vlcpulse音频输出错误:PulseAudio服务器连接失败:连接被拒绝”;“dbus接口错误:无法连接到D-Bus会话守护程序:无法连接到套接字/ tmp/dbus-CRRGy7gvlN:连接被拒绝”等...)

所以,最后我安装gnome-terminal并尝试了它 - 它也不会启动,就像mate-terminal,除了不同的消息:

$ sudo /usr/bin/ip netns exec MYNS su -c /usr/bin/gnome-terminal myusername
# Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-pRWfI7rzyW: Connection refused
# Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Could not connect: Connection refused

该文件/tmp/dbus-pRWfI7rzyW在两个终端启动时不断重复,但是:

$ sudo ls -la /tmp/dbus*
ls: cannot access '/tmp/dbus*': No such file or directory

...它绝对不存在于系统中。

所以,我的猜测是,这可能与 DBUS 有关 - 不幸的是,我并不真正了解或理解 dbus。

我的问题是 - 有没有我可以做的解决方法,mate-terminal或者gnome-terminal每次都可以在这种情况下开始?

答案1

正如您所怀疑的,高级终端无法工作的原因是它们无法连接到 dbus。这是因为 dbus 使用抽象的 unix 套接字,该套接字在新的命名空间中不可用(请参阅此问题)。

该引用的问题中有很多选项,但最简单的可能是为每次调用获取一个 dbus 会话,如果您不需要大量共享 dbus 细节(可能不需要):

sudo /usr/bin/ip netns exec MYNS su -c "/usr/bin/dbus-launch /usr/bin/gnome-terminal"

相关内容