Command

ip netns exec 不能僅啟動 mate-terminal 和 gnome-terminal?

  • May 8, 2021

我正在使用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每次都可以在這種情況下開始?

正如您所懷疑的,更高級的終端無法正常工作的原因是它們無法連接到 dbus。這是因為 dbus 使用了一個抽象的 unix 套接字,該套接字在該新命名空間中不可用(請參閱此問題)。

在那個引用的問題中有很多選項,但可能最簡單的方法是為每次呼叫獲取一個 dbus 會話,如果您不需要很多共享的 dbus 細節(可能不需要):

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

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