分类 Pixelbook高级 下的文章

在相当长的一段时间内,我的Pixelbook总会出现有时无法连接ssr,过一段时间又可以连接的问题。之前这个问题困扰了我好久,今天终于排查出了原因:

可能是因为关闭了操作系统验证的原因,系统无法自动从互联网上同步时间(不知道没关闭操作系统验证的电脑可不可以)。所以如果在很长一段时间不用之后,电脑会自动关机,系统的时间会比现实时间早若干天。当时间差达到一定程度的时候,可能会出现证书验证失败的问题,这就导致ssr无法进行连接。

在经过一段时间的使用后,用户(我)注意到了时间的问题,将时间改为正常的时间,即可重新正常使用ssr。这也是为什么过一段时间就莫名其妙可以正常连接的原因。

以上证书的问题是我的猜想,真是的情况可能不是这样,但应该也不会有太大差别,经过尝试确实是系统设置的时间导致的问题。之所以有这样的猜想是因为偶然间在一台时间不正确的电脑上访问了https加密的网页(还是个几乎不会出问题的大网站),浏览器报告网页证书不安全的问题,仔细查看是时间导致的问题。后来出现无法连接ssr的时候想到了这个情况觉得是相似的,所以做出了这样的猜想。

前置条件:

已开启Linux (Beta)
可能需要开启梯子,本教程不考虑一切网络问题

如果你没有梯子,在某些步骤需要换成国内源

教程所使用的系统版本:

Version 80.0.3987.137 (Official Build) (64-bit)

步骤

进入 termina

使用Ctrl+alt+t开启系统自带的命令行
输入vmc start termina进入vm:

crosh> vmc start termina
(termina) chronos@localhost ~ $ 

使用 lxc 创造并进入容器

输入lxc launch ubuntu:18.04 desktop 创建容器
输入lxc exec desktop bash 进入容器
输入su ubuntu 登入ubuntu用户
输入cd ~ 进入用户目录

(termina) chronos@localhost ~ $ lxc launch ubuntu:18.04 desktop
Creating desktop
Starting desktop
(termina) chronos@localhost ~ $ lxc exec desktop bash
root@desktop:~# su ubuntu
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@desktop:/root$ cd ~
ubuntu@desktop:~$ 

注意:如果你清楚你正在做什么,可以尝试以下操作:

  • 输入lxc remote list查看镜像资源并访问相应网站以更改在这一步建立的镜像
  • 输入lxc remote add以增加新的镜像资源
  • 输入lxc image list以查看或管理本地镜像
  • 修改desktop为其他名字对容器进行命名。
  • 使用root或其他用户进行后续操作

安装相关依赖

依次输入以下命令:
更新源:

sudo apt update

更新软件:

sudo apt upgrade

安装桌面环境(这一步所需的时间比较长,可能需要几十分钟):

sudo apt install ubuntu-gnome-desktop
注意:如果你清楚自己正在做什么,可以替换为其他桌面环境(如kde,xfce等)。
但是可能面临无法连接,无法启动,登录后无内容等信息。本文中所使用的配置与命令是我亲测可用的。

安装VNC相关程序:

sudo apt install xserver-xorg-core tigervnc-standalone-server tigervnc-xorg-extension tigervnc-viewer

配置VNC程序

输入vncserver启动vnc服务器,由于是首次启动,你将看到以下信息:

You will require a password to access your desktops.

Password:
Verify:
Would you like to enter a view-only password (y/n)? n
/usr/bin/xauth:  file /home/ubuntu/.Xauthority does not exist

New 'BaseBionicDesktop.lxd:1 (ubuntu)' desktop at :1 on machine BaseBionicDesktop.lxd

Starting applications specified in /etc/X11/Xvnc-session
Log file is /home/ubuntu/.vnc/BaseBionicDesktop.lxd:1.log

Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/ubuntu/.vnc/passwd :1 to connect to the VNC server.

键入两次访问密码,之后键入n(这一步是询问是否增加一个只读密码,由于我们是在本机使用,不需要这个功能)

输入vncserver -kill :*关闭vnc服务器,你将看到以下信息:

Killing Xtigervnc process ID 1080... success!

输入vi ~/.vnc/xstartup(其中vi可以替换成nano)修改xstartup文件,替换成以下信息并保存退出:

#!/bin/sh
# Start Gnome 3 Desktop 
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
vncconfig -iconic &
dbus-launch --exit-with-session gnome-session &

依次输入以下两个命令开启桌面服务:

sudo systemctl start gdm
sudo systemctl enable gdm

在输入第二个命令的时候可能出现以下信息:

The unit files have no installation config (WantedBy, RequiredBy, Also, Alias
settings in the [Install] section, and DefaultInstance for template units).
This means they are not meant to be enabled using systemctl.
Possible reasons for having this kind of units are:
1) A unit may be statically enabled by being symlinked from another unit's
   .wants/ or .requires/ directory.
2) A unit's purpose may be to act as a helper for some other unit which has
   a requirement dependency on it.
3) A unit may be started when needed via activation (socket, path, timer,
   D-Bus, udev, scripted systemctl call, ...).
4) In case of template units, the unit is meant to be enabled with some
   instance name specified.

如果出现此类信息,输入sudo vi /lib/systemd/system/gdm.service修改配置文件,并将以下内容添加到文件末尾:

[Install]
WantedBy=multi-user.target

再输入一次sudo systemctl enable gdm,出现以下信息则说明开启启动设置成功

Created symlink /etc/systemd/system/multi-user.target.wants/gdm.service → /lib/systemd/system/gdm.service.

启动vnc服务器并连接

输入以下命令启动vnc服务器

tigervncserver -localhost no -geometry 1200x900 -depth 24
使用1200x900分辨率是因为pixelbook默认的虚拟分辨率是1200x900,你可以根据需要替换成其它值
进入应用商店下载VNC® Viewer for Google Chrome™插件

新启动一个termina页面或返回至termina页,输入lxc list,可以看到类似以下的信息:

+-------------------+---------+-----------------------+------+------------+-----------+
|       NAME        |  STATE  |         IPV4          | IPV6 |    TYPE    | SNAPSHOTS |
+-------------------+---------+-----------------------+------+------------+-----------+
| desktop           | RUNNING | 100.115.92.197 (eth0) |      | PERSISTENT | 0         |
+-------------------+---------+-----------------------+------+------------+-----------+
| penguin           | STOPPED |                       |      | PERSISTENT | 1         |
+-------------------+---------+-----------------------+------+------------+-----------+

desktop后面的ip地址即为该linux容器的ip地址,打开VNC插件后输入

100.115.92.197::5901

进行连接即可(ip请替换为你自己界面中的ip)

其他可选项

参考网络上的资料,有使用系统服务来在容器启动时自动开启vnc服务的方法,但是我尝试了好久,以服务方式启动连接上之后无法显示桌面环境,暂未找到解决方法。

使用别名来令启动更加简单:
在系统内输入vi ~/.bash_aliases
加入以下内容:

alias runvnc='tigervncserver -kill :* && tigervncserver -localhost no -geometry 1200x800 -depth 24'
alias stopvnc='tigervncserver -kill :*'

之后即可使用runvnc来启动vnc服务,使用stopvnc来关闭vnc服务。

20/05/10 更新:在最近的某次更新之后,ubuntu源( https://cloud-images.ubuntu.com/releases )的镜像都不能使用了,建议改成images源( https://images.linuxcontainers.org )

参考资料:

Install VNC Server with Gnome display on Ubuntu 18.04

How to debug a failed systemctl service (code=exited, status=217/USER)?

linux中如何让命令的别名重启后还生效

备份

  • 使用 Ctrl+shift+t 打开命令行窗口
  • 使用 vmc start termina 进入虚拟容器
  • 使用 lxc list 查看容器名字及备份数量(某些重大更新后可能会有自动备份,否则需要手动备份)
  • 使用 lxc snapshot penguin <备份编号>进行备份

恢复

  • 使用 Ctrl+shift+t 打开命令行窗口
  • 使用 vmc start termina 进入虚拟容器
  • 使用 lxc list 查看备份数量(某些重大更新后可能会有自动备份,否则需要手动备份)
  • 使用 lxc info penguin 查看备份的编号
  • 使用 lxc restore penguin <编号> 进行恢复

某些更新后(之所以用某些是因为有的时候备份会出现有的时候又会消失)在设置中自带备份与恢复选项,但是那种方式的备份与恢复效率过低,相比此种方式的优势在于可以导出一个单独的文件,可以复制到其他设备上。具体使用哪种方式请读者自行权衡

20/03/17更新

lxc容器的管理非常方便,你可以简单的使用

  • lxc copy <容器名字> <副本名字>
  • lxc delete <容器名字>
  • lxc rename <容器名字> <新名字>

等命令来轻松的进行备份,复制,重命名,删除等操作。
不过在只用copy命令复制时会连快照snapshot一起复制,注意可能会因此占用较多的磁盘空间。

20/07/15更新

除了以上两种方式,实际上还有通过发布容器的方式进行备份,将发布后的容器备份挂载到某个容器中,并通过ssh或者其他方式拷贝出来,也可以得到单独的备份文件,效率比设置中的备份与恢复高,也可以导出单独的文件存储至可移动设备上,不过缺点是需要比较多的步骤,输入较多的命令。感兴趣的可以上网搜索相关教程。

参考资料:Chrome 操作系统帮助

设置远程访问

Windows

  • 下载 Chrome 远程桌面应用。
  • 在计算机上打开 Chrome。
  • 在屏幕顶部的地址栏中输入 chrome://apps,然后按 Enter 键。
  • 点击“Chrome 远程桌面”图标。
  • 在“我的计算机”下,点击开始使用。
  • 点击启用远程连接。
  • 输入相应 PIN 码,继而再次输入该 PIN 码,然后点击确定。
  • 点击是,以安装“Chrome 远程桌面”服务。
  • 确认 Google 帐号,然后再次输入相应 PIN 码以继续操作。

您启用了远程连接的计算机会显示在“我的计算机”下方。

Mac

  • 下载 Chrome 远程桌面应用。
  • 在计算机上打开 Chrome。
  • 在屏幕顶部的地址栏中输入 chrome://apps,然后按 Enter 键。
  • 点击“Chrome 远程桌面”图标。
  • 在“我的计算机”下,点击开始使用。
  • 点击启用远程连接。然后按照屏幕上的说明操作。
  • Chrome 会下载一个 .dmg 文件。点击保存。
  • 该文件下载完毕后,将其打开。
  • 按照屏幕上的提示操作,完成安装。然后,返回 Chrome。
  • 要为您的计算机开启远程访问功能,请点击确定。
  • 输入相应 PIN 码,继而再次输入该 PIN 码,然后点击确定。
  • 系统显示相应对话框后,解锁面板并再次确认您的帐号和 PIN 码。
  • 系统会显示“此计算机的远程连接已启用”这一消息。请点击确定关闭该消息。

您启用了远程连接的计算机会显示在“我的计算机”下方。

Linux

第 1 步:下载并安装 Chrome 远程桌面

第 2 步:为主机组件安装 Debian 软件包

  • 点击此处即可下载 64 位 Debian 软件包。

第 3 步:创建虚拟桌面会话

  • 如果您使用的是 Ubuntu 12.04,请跳至第 4 步。

    1. /usr/share/xsessions/ 中查找用作首选桌面环境的 .desktop 文件。

      • 例如,Cinnamon 有一个名为“cinnamon.desktop”的文件,其中包含以下命令:gnome-session --session=cinnamon
    2. 在您的主目录中创建一个名为“.chrome-remote-desktop-session”的文件,其中包含以下内容:

      • exec /usr/sbin/lightdm-session "<YOUR_EXEC_COMMAND>"
    3. 用您 .desktop 文件末尾处的命令替换 <YOUR_EXEC_COMMAND>

      • 在 Cinnamon 示例中,正确的命令是:exec /usr/sbin/lightdm-session 'gnome-session --session=cinnamon'
      • 如果是 Unity 桌面,还需要使用一些额外的代码。完整的命令是:DESKTOP_SESSION=ubuntu XDG_CURRENT_DESKTOP=Unity XDG_RUNTIME_DIR=/run/user/$(id -u) exec /usr/sbin/lightdm-session 'gnome-session --session=ubuntu'
    4. 保存名为“.chrome-remote-desktop-session”的文件。

第 4 步:启用远程连接

  • 在计算机上打开 Chrome。
  • 在屏幕顶部的地址栏中输入 chrome://apps,然后按 Enter 键。
  • 点击“Chrome 远程桌面”图标。
  • 在“我的计算机”下,点击开始使用。
  • 点击启用远程连接。
  • 输入相应 PIN 码,继而再次输入该 PIN 码,然后点击确定。
  • 关闭确认对话框。

Chromebook

  1. 下载 Chrome 远程桌面应用。
  2. 点击添加至 Chrome。
  3. 点击添加应用进行确认。
  4. 在屏幕一角,依次点击“启动器”图标 -> 向上箭头。
  5. 点击“Chrome 远程桌面”图标。

与其他人共用您的计算机

您可以允许他人访问您的计算机。他们将获得对您的应用、文件、电子邮件、文档和历史记录的完整访问权限。

  • 在计算机上打开 Chrome。
  • 在屏幕顶部的地址栏中输入 chrome://apps,然后按 Enter 键。
  • 点击“Chrome 远程桌面”图标 “Chrome 远程桌面”应用。
  • 点击开始使用。
  • 要创建访问代码,请点击共享。
  • 将此代码发送给您想要让其使用您计算机的用户。
  • 对方输入此访问代码后,便会看到您的电子邮件地址并可完全控制您的计算机。
  • 要结束共享会话,请点击停止共享。

远程访问其他计算机

计算机

远程访问计算机

  • 在计算机上打开 Chrome。
  • 在屏幕顶部的地址栏中输入 chrome://apps,然后按 Enter 键。
  • 点击“Chrome 远程桌面”图标 “Chrome 远程桌面”应用。
  • 选择您想要访问的对象。您可能需要先点击开始使用。
  • 如果您要访问自己的计算机,请点击此计算机。
  • 如果您要访问与您共享的其他计算机,请点击访问。
  • 输入登录所需的 PIN 码或访问代码。
  • 点击连接。
  • 出于安全考虑,所有远程桌面会话均会完全加密。

停止远程会话

  • 完成远程会话后,请转到页面中央,然后依次点击“向下箭头”图标 -> “断开连接”。

从列表中移除计算机

  • 在计算机上打开 Chrome。
  • 在屏幕顶部的地址栏中输入 chrome://apps,然后按 Enter 键。
  • 点击“Chrome 远程桌面”图标。
  • 在您要移除的计算机旁边,点击停用远程连接。

Android设备

远程访问计算机

  1. 在 Android 手机或平板电脑上,打开“Chrome 远程桌面”应用 。如果您尚未安装,请从 Google Play 中下载
  2. 从列表中点按您想要访问的计算机。如果某台计算机名称呈暗淡状态,则表示此计算机处于离线状态或无法访问。
  3. 您可以采用两种不同的模式来控制该计算机。只需点按工具栏中对应的图标即可在不同的模式之间切换。

    • 要想通过虚拟鼠标指针来执行操作,请点按“触控板模式”图标 触控板模式。
    • 要想通过点按来执行操作,请点按“触摸模式”图标 触摸模式。

出于安全考虑,所有远程桌面会话均会完全加密。

在远程访问计算机时使用手势

  • 向上或向下滚动:双指滑动。
  • 点击并拖动:用一根手指拖动。
  • 缩放:双指张合。
  • 显示键盘:三指向上滑动。
  • 显示工具栏应用:三指向下滑动。
  • 移动鼠标:在屏幕上的任意位置滑动(仅适用于触控板模式)。
  • 点击鼠标左键:点按屏幕。
  • 点击鼠标右键:双指点按屏幕(仅适用于触控板模式)。
  • 点击鼠标中键:三指点按屏幕(仅适用于触控板模式)。

从列表中移除计算机

  1. 在 Android 手机或平板电脑上,打开“Chrome 远程桌面”应用。
  2. 触摸并按住您想要移除的计算机的名称。
  3. 点按删除。
  4. 点按确定。

问题排查提示

如果遇到问题,请尝试按以下提示操作:

  • 如果无法打开网页,请检查设备的连接。
  • 如果所访问的计算机使用的是单位或学校的网络,则可能会不允许您让其他人访问。如需了解详情,请与您的管理员联系。
  • 确保您使用的是最新版本的“Chrome 远程桌面”应用。

iPhone 或 iPad

远程访问计算机

  1. 在 iPhone 或 iPad 上,打开“Chrome 远程桌面”应用。如果您尚未安装,请从 iTunes 中下载
  2. 从列表中点按您想要访问的计算机。如果某台计算机名称呈暗淡状态,则表示此计算机处于离线状态或无法访问。
  3. 您可以采用两种不同的模式来控制该计算机。只需点按工具栏中对应的图标即可在不同的模式之间切换。

    • 要想通过虚拟鼠标指针来执行操作,请点按“触控板模式”图标。
    • 要想通过点按来执行操作,请点按“触摸模式”图标。

出于安全考虑,所有远程桌面会话均会完全加密。

在远程访问计算机时使用手势

您可以在远程访问计算机时使用手势。

  • 向上或向下滚动:双指滑动。
  • 点击并拖动:用一根手指拖动。
  • 缩放:双指张合。
  • 显示键盘:三指向上滑动。
  • 显示工具栏应用:三指向下滑动。
  • 移动鼠标:在屏幕上的任意位置滑动(仅适用于触控板模式)。
  • 点击鼠标左键:点按屏幕。
  • 点击鼠标右键:双指点按屏幕(仅适用于触控板模式)。
  • 点击鼠标中键:三指点按屏幕(仅适用于触控板模式)。

从列表中移除计算机

如果您想修改计算机列表,请登录此列表中的任一台计算机,然后打开“Chrome 远程桌面”应用。

使用第三方应用程序

推荐使用 Teamviewer ,在Play StoreWeb Store 中均可下载。
提前在要控制的设备上部署即可实现远程访问。