如果直接安装snap可能会出现类似以下问题:

error: system does not fully support snapd: cannot mount squashfs image using "squashfs": mount:

然而在自己搭建的容器中却不会出现这样的情况,推测是由容器配置不当引起的,在搜索很多教程后发现并不需要在主机修改penguin的配置,直接在容器内部输入下列命令安装相关依赖即可:

sudo apt install libsquashfuse0 squashfuse fuse

参考资料
YES, YOU CAN INSTALL SNAP PACKAGES ON CHROME OS, BUT IT’S NOT GREAT

在相当长的一段时间内,我的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或者其他方式拷贝出来,也可以得到单独的备份文件,效率比设置中的备份与恢复高,也可以导出单独的文件存储至可移动设备上,不过缺点是需要比较多的步骤,输入较多的命令。感兴趣的可以上网搜索相关教程。

更改系统默认语言

安装语言包

  • 修改locale.gen文件

    sudo vim /etc/locale.gen

    去掉zh_CN.GBK GBK,zh_CN.UTF8 UTF8的注释,或者直接添加这两行内容。

  • 使用sudo locale-gen下载语言。

修改默认语言编码

sudo dpkg-reconfigure locales

选择系统的默认语言,推荐选择zh_CN.UTF8 UTF8

如果系统语言未改变尝试重启

修复中文乱码

安装中文字体

sudo apt-get install xfonts-wqy ttf-wqy-zenhei ttf-wqy-microhei

如果中文依然乱码尝试重启

安装中文输入法

安装 Fcitx

虽然一般 debian 都有装 fcitx 但还是确保一下

sudo apt install fcitx

配置 Fcitx

im-config

点击确定->点击Yes->选择fcitx->确定->确定

重启使配置生效

安装谷歌拼音输入法

sudo apt install fcitx-googlepinyin

移除Module避免冲突(不确定是否必须)

sudo apt remove fcitx-module-kimpanel

添加输入法

fcitx-config-gtk3

在界面中添加谷歌拼音输入法,如果没有看到尝试重启。

修改环境变量以支持某些软件(如Clion等)

sudo vi /etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf

在文件末尾添加以下内容

Environment="GTK_IM_MODULE=fcitx"
Environment="QT_IM_MODULE=fcitx"
Environment="XMODIFIERS=@im=fcitx"

这些环境变量可能会因为未来Chrome的更新而被取代。

设置开机自启动

sudo vim ~/.sommelierrc

在其中输入

/usr/bin/fcitx-autostart