Ubuntu工作区中如何隔离已打开的应用程序及进程
我完全懂你的痛点——系统内置工作区总把同一款应用的窗口串到别的工作区,用多用户切换又会让另一个用户的进程休眠,想同时开两个Telegram或Spotify还做不到。下面给你几个Ubuntu上可行的方案,从简单易用到进阶隔离都有:
1. 用Flatpak创建独立隔离实例(最简便)
很多常用应用都有Flatpak包,它自带沙箱机制,还支持创建多个完全独立的应用实例,进程、配置、数据全部分开,完美解决同应用多开串窗口的问题。
- 先装Flatpak版的目标应用,比如Telegram:
flatpak install org.telegram.desktop - 然后创建并运行第二个独立实例(比如用于学习):
flatpak run --instance=study org.telegram.desktop
同理,Chrome、Spotify这类应用都可以这么操作:比如给工作开一个Chrome实例,给学习开另一个,两者的书签、缓存、进程完全隔离,你可以把它们分别拖到对应的工作区,切换时绝不会串窗口。
2. 用Firejail轻量沙箱隔离(灵活性高)
Firejail是Ubuntu仓库自带的轻量级沙箱工具,能快速给任意应用创建隔离环境,支持自定义配置目录,适合给VSCode、Obsidian这类没有Flatpak包或者需要个性化隔离的应用使用。
- 先安装Firejail:
sudo apt install firejail - 给工作场景开一个隔离的Chrome:
firejail --private=~/chrome-work-profile google-chrome - 给学习场景开另一个:
firejail --private=~/chrome-study-profile google-chrome
这里的--private参数指定了独立的配置存储目录,两个Chrome的进程完全独立,不会共享任何数据。你也可以用同样的方式隔离VSCode、PyCharm,比如:
firejail --private=~/vscode-work-profile code
3. 独立用户会话+后台运行(彻底用户级隔离)
你之前提到多用户切换会导致进程休眠,其实可以用命令直接启动另一个用户的应用,让两个用户的进程同时运行,不会被休眠:
- 先创建一个新用户(比如叫
study):sudo adduser study - 从当前用户启动
study用户的Chrome(用于学习):runuser -l study -c "google-chrome &"
这样启动的Chrome属于study用户,进程和当前用户的应用完全隔离,你可以把这个窗口拖到学习工作区,切换工作区时两个用户的进程都在后台正常运行,绝不会休眠。如果嫌命令麻烦,还可以给这些命令创建桌面快捷方式,双击就能启动对应用户的应用。
4. Podman/Docker容器隔离(最强隔离)
如果需要最彻底的隔离(连系统依赖库都分开),可以用容器来运行桌面应用,适合对隔离要求极高的场景:
- 先安装Podman:
sudo apt install podman - 运行一个完全隔离的Chrome实例:
podman run -it --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix docker.io/jess/chrome
这种方式下,应用的进程完全在容器内部,和主机系统没有任何共享,你可以给工作和学习分别创建不同的容器配置,甚至用不同的Linux发行版镜像来跑应用,但操作相对复杂一点,适合有一定技术基础的用户。
总结一下:如果只是日常同应用多开隔离,Flatpak是最省心的选择;Firejail适合给各种应用做轻量隔离;独立用户会话适合需要完全用户级隔离的场景;容器则是最强隔离的选项。你可以根据自己的需求选一个,甚至组合起来用,完全能满足你工作和学习场景彻底分开的需求。
备注:内容来源于stack exchange,提问作者essacult

