背景
之前一直用Teamviewer来连接家里或者学校的电脑(主要是舰娘插件的统计数据不能网络同步,还是固定挂在一台电脑上比较方便),前两天Teamviewer说检测到我在给别人提供支持,ban了我个人license,必须要付费才能继续用。这么一个破远程桌面我肯定是不愿意一个月付十几二十欧的,果断卸载。
以前只用Windows的时候一直在用Chrome远程桌面,连接没有Teamviewer流畅,对多屏幕的支持不太好,也没有文件传输这种功能。但是,它完全免费!!之前在Ubuntu没有用这个的原因是一直配置不好,连接打开只能看到黑屏。这次参考网上的信息,成功配置好了。
安装配置
- 第一步肯定是安装Google Chrome浏览器,然后安装Chrome Remote Desktop插件。
- 打开插件后可以看到有个共享这台电脑的选项,会下载一个安装包,使用
sudo dpkg -i chrome-remote-desktop_current_amd64.deb
安装,如果报告缺少依赖,使用sudo apt install -f
来安装。 - 如果这个时候刷新Chrome Remote Desktop插件,会说无法启动远程桌面,必须手动
mkdir ~/.config/chrome-remote-desktop
给它创建一个存储配置的文件夹。 - 在插件里点击启动,设置一个PIN,可能会要求输入sudo的密码。这时候我们的电脑出现在了可连接的列表里,然而连接它会显示一个完全的黑屏,而且我们电脑上被创建了一个新的桌面,但我需要的是连上一直在用的桌面。
- 手动修改远程桌面的代码,先停止远程桌面的服务
/opt/google/chrome-remote-desktop/chrome-remote-desktop --stop
,然后用喜欢的文本编辑器打开代码源文件sudo gedit /opt/google/chrome-remote-desktop/chrome-remote-desktop
,不放心可以先复制到别的地方备份一下。 - 找到DEFAULT_SIZES,我这在77行,修改为自己显示器的分辨率,例如
DEFAULT_SIZES = "1920x1200"
。 - 命令行输入
echo $DISPLAY
确认当前显示器编号,我这显示的是:1。找到代码中的FIRST_X_DISPLAY_NUMBER,我这在112行,改为自己的显示器编号,例如FIRST_X_DISPLAY_NUMBER = 1
。 注释掉1385-1386行的寻找更多显示器的代码。
# while os.path.exists(X_LOCK_FILE_TEMPLATE % display): # display += 1
把741行附近的launch_session函数整个改写成下面这样,让远程桌面使用当前桌面而不是创建一个新的。Reddit原文中调用了_setup_pulseaudio()函数,但我没找到这个函数的定义,有可能是新版本不用了,就先注释掉了。因为我不开声音,所以还不知道有什么影响。
def launch_session(self, server_args, backoff_time): """Launches process required for session and records the backoff time for inhibitors so that process restarts are not attempted again until that time has passed.""" logging.info("Setting up and launching session") self._init_child_env() # self._setup_pulseaudio() self._setup_gnubby() # self._launch_server(server_args) # if not self._launch_pre_session(): # # If there was no pre-session script, launch the session immediately. # self.launch_desktop_session() # self.server_inhibitor.record_started(MINIMUM_PROCESS_LIFETIME, # backoff_time) # self.session_inhibitor.record_started(MINIMUM_PROCESS_LIFETIME, # backoff_time) display = self.get_unused_display_number() self.child_env["DISPLAY"] = ":%d" % display
- 保存文件,用
/opt/google/chrome-remote-desktop/chrome-remote-desktop --start
重新启动服务,并祈祷能用了。
设置开机自动启动
由于chrome remote desktop的服务是用户级别的,因此并不能随着开机自动启动,每次开机只有登录进去之后才能自己手动开启,有点麻烦。可以自己在Ubuntu桌面提供的Startup Application 中加入一个条目,Command设置为bash -c "sleep 5 && echo sudo_password | sudo -S -k systemctl start chrome-remote-desktop@username"
,意思是在用户登录后延迟五秒后开启chrome远程桌面服务,把sudo_password和username替换为自己的。需要注意的是这里会把自己的用户密码明文写在命令里,介意的慎用。
参考资料
https://www.reddit.com/r/Ubuntu/comments/wrp4dr/ubuntu_2204_and_chrome_remote_desktop_trouble/