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
每次都可以在這種情況下開始?
正如您所懷疑的,更高級的終端無法正常工作的原因是它們無法連接到 dbus。這是因為 dbus 使用了一個抽象的 unix 套接字,該套接字在該新命名空間中不可用(請參閱此問題)。
在那個引用的問題中有很多選項,但可能最簡單的方法是為每次呼叫獲取一個 dbus 會話,如果您不需要很多共享的 dbus 細節(可能不需要):
sudo /usr/bin/ip netns exec MYNS su -c "/usr/bin/dbus-launch /usr/bin/gnome-terminal"