我正在使用 LXD 容器,但无法完全理解隔离发生了什么。以下是我的场景:
- 创建一个 16.04 容器
launch ubuntu:16.04 mycontainer
lxc exec mycontainer /bin/bash
在其中安装 Firefoxapt install firefox
- 创建与我的主系统用户同名的用户
adduser myuser
- ssh-copy-id 给该用户
vi /etc/sshd_config
以允许使用密码进行 ssh,然后从主会话ssh-copy-id myuser@mycontainer-ip
- ssh -X 进入容器并启动 Firefox
ssh -X myuser@mycontainer-ip
和firefox
如果我在主会话中没有打开 Firefox,则会弹出一个孤立的 Firefox:无法访问我的主会话文件、没有插件等......
但是,如果 Firefox 已经在我的主会话中运行,则从容器中的 ssh -X 会话启动 FF 会打开另一个未隔离的 FF 窗口,并以我的主要用户身份运行(使用我的插件、访问文件等...)。
怎么了 ?
答案1
我在 lxd 的 github 上打开了一个错误报告,Stéphane Graber 给了我答案:这是Firefox 的一个功能,可以通过开关关闭--no-remote
。所以当然LXD 没有问题!
引用 Stéphane 的话:
我很久没有用过 Firefox 了,但我相信他们有代码可以通过 X 属性来查找并与现有的 Firefox 进行交互。
由于您传递了“-X”,您的容器可以访问您的 X 服务器,因此可以查询/设置 X 属性、列出所有正在运行的窗口......这很可能是 Firefox 检测现有 Firefox 会话并让其打开新窗口而不是产生新进程的方式。
我希望 Firefox 有一个命令行选项,以使其不这样做。
塞https://github.com/lxc/lxd/issues/3049
因此firefox --no-remote
从容器启动会阻止 Firefox 在我的主会话中打开新窗口。