crouton概述

ChRomium Os Universal chrooT EnvirONment
1
2
3
4
5
6
7
8
9

Crouton是CrOS上的一个chroot生成器。它能够自动完成对指定linux镜像的构建,并以chroot的形式启动它们。Crouton使得Ubuntu,Debian和Kali Linux系统能够与Chrome OS系统并行运行。它使用的是chroot而不是双启动的方式,允许用户同时运行不同的桌面环境:Chrome OS和用户通过crouton选择的其他环境。

### 作用
在Chromium os上面通过chroot直接运行linux。此时,Chromium OS与chroot内的系统是并行运行的。

# 使用crouton
下载地址:https://goo.gl/fd3zc ;如果地址失效可以从```https://github.com/dnschneid/crouton```找到最新的下载地址。

sudo sh ~/Downloads/crouton -t xfce

1
2
3
4
5
6
7
8
9
10
11
12
> -t xfce表示旋转使用xfce作为桌面环境,常用的桌面环境有kde gnome xfce unity;更多桌面环境可以参考命令help。
>
> -n chrootname指定chroot的名称。
>
> -u update;更新指定的chroot。该参数用于修改、更新chroot内的系统的设置 :如通过-u与-t xiwi的配合,将原不带xiwi的系统update为使用xiwi的系统。
>
> 当然,希望尝试不同的桌面环境,可以直接使用-n chroot name来创建新的chroot,不一定要在原有的chroot上进行update。

- 该命令将构建Ubuntu并创建chroot;在运行过程中会要求输入新用户的用户名密码作为chroot系统里面的初始用户。
- chroot的默认路径:```/mnt/stateful_partition/crouton/chroots```
- 可以通过-p参数来指定chroot的位置。==当chroot路径不是默认路径时,在enter-chroot或startxxx的时候注意通过-c指定路径==,否则按照默认路径进入系统。

sudo enter-chroot startgnome

or

sudo startgnome

1
2
3
4
5
6
7
该命令启动并进入chroot里面的系统。
> 其中启动命令对应桌面环境,如startgnome进入gnome桌面。
>
> 注意:startgnome命令的意义是启动桌面环境,它会自动启动对应的linux,但是startgnome的真正工作是启动桌面环境,也就是说,Linux系统的启动与否并不取决与是否有startxxx命令,因为可以以不启动桌面环境的形式来启动系统。

### After crouton
进入chroot后,如果需要修改软件包,则需先运行以下命令,否则可能出现apt install或dpkg安装失败的情况。

sudo apt-get install -f
sudo apt-get upgrade && sudo apt-get update

1
2
3

### 在Chromium OS和chroot linux之间进行切换
在CrOS和chroot之间切换:

Ctrl+Alt+Shift+F1
Ctrl+Alt+Shift+F2

1
2
3
4
5
6
7
8

```sh crouton -r list```查询支持安装的发行版(包括Ubuntu、debian、kali的各种发行版)。

```-t core```或```-t cli-extra```只安装CLI而不安装桌面环境。
==如果没有安装桌面环境,或者是安装了桌面环境但是不想启动桌面,可以直接使用==```enter-chroot```。在此条件下,==使用```startcli```来打开一个VT(虚拟终端),该终端的会话实际上由chroot里面的系统提供==。

## 修改chroot内的系统使用的桌面环境
通过-u(update)参数将chroot修改为使用xiwi:

sudo crouton -u -t xiwi

多环境

sudo crouton -u -t xiwi,gnome

1
2
3
(u)pdate已有chroot内的系统;

## Single-App 单App模式

sudo crouton -t xiwi

1
2
3
4
5
6
> 只安装xiwi作为唯一的显示系统,而不安装独立的桌面环境。不是首次安装,不需要-u参数。

==注意:只安装xiwi,没有桌面系统,此时必须安装了crouton extension,否则无法打开Linux窗口。==

## 在使用xiwi的情况下临时使用X11进行启动
如果希望使用xiwi的同时临时使用X11,可以通过-X参数:

sudo enter-chroot startgnome -X xiwi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

该模式下chroot内的系统没有自己的桌面环境,只能通过xiwi在Chromium OS里面显示。

# crouton extension
> It's also highly recommended that you install the crouton extension, which, when combined with the extension or xiwi targets, provides much improved integration with Chromium OS.

全称:crouton intergration;该插件在Google extension store不能成功搜索到(尝试了Linux的chrome和Chrome OS的Chrome都搜不到这个extension),只好从别的地方找到了网址,然后手动键入Chrome OS的浏览器导航栏进行下载。

当希望通过插件(crouton extension)或```xiwi```(X11 in Window,将X11界面用一个窗口显示出来,类似Android窗口通过wayland显示到chromium OS)来进行显示的时候,可以使用crouton插件,它比直接使用crouton具有更好的兼容性。

## crouton extension的作用
- ==允许chroot内的系统共享使用Chromium OS的设施(如剪贴板、浏览器)。==
- ==允许chroot内的系统以常规Chromium OS window的形式创建会话窗口(就是说允许在Chromium OS里面显示chroot系统的窗口,在Chromium OS里面显示chroot的窗口而不需要通过Ctrl+alt+Shift进行桌面系统的切换)。==

在chroot系统内使用Chromium Browser的方法:
> 在Chromium OS的browser中安装```crouton```extension。然后把chroot系统内的所有browser都卸载掉。这时在chroot内打开的url都会由Chromium OS的Chromium进行处理。

## 让chroot内的应用以窗口形式直接内嵌显示在Chromium OS
- crouton extension
- xiwi

### Download crouton extension
[crouton extension download](https://chrome.google.com/webstore/detail/crouton-integration/gcpneefbbnfalgjniomfjknbcgkbijom)

### 在Chromium OS中以窗口形式运行Linux
步骤:
1. Chromium OS Chrome or Chromium Browser安装插件Crouton;
2. 通过crouton命令来更改chroot内的系统的默认显示server; Command as follow:

sudo sh ~/Downloads/crouton -t xiwi -u -n chrootname
// # reset:
sudo sh ~/Downloads/crouton -t xorg,xiwi -u -n chrootname

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
> 命令解释:
- ```-t xiwi```使用xiwi(X11 in Window)作为默认的显示服务;将chroot内的系统显示到Chromium OS窗口的服务就是xiwi;Ubuntu默认的显示服务是X11,使用命令参数```-t xorg,xiwi```即可修改为默认的X11。xorg就是常说的X显示server,Linux命令```startx```中的x就是xorg。
- ```-n chrootname```指定chroot,其中,chrootname可以在chroot内的系统中看到(进入chroot内的系统后,在终端的命令提示符内看得到)。在Chromium OS中,第一次创建chroot默认的chrootname为```xenial```。

执行完以上两个步骤后,以常规方式进入chroot或者startxxx(startunity这种带图形界面的或startcli启动Cmd Line Interface命令行界面),此时会出现一个新的窗口显示chroot,另外,可以在Chromium OS browser的crouton extension处看到一些信息。

## Crosh Window extension
> Use the Crosh Window extension to keep Chromium OS from eating standard keyboard shortcuts.

作用:
1. 安装后在browser插件栏中单击它,打开一个新的outside chrome的crosh窗口(crosh是Chromium OS的shell的名称,打开后输入shell即可进入bash命令行);
2. 该插件确保键盘组合键不会被Chromium OS or Chromium browser处理,而是将组合键发送到shell窗口处理;(如:在browser取得屏幕焦点的情况下,Ctrl+T会打开新的Tab,在该插件打开的Crosh窗口中就会发送到系统,而不交给browser处理)

==如果不安装该插件,在启动chroot内桌面环境后,单击Ctrl + t按钮不是打开chroot内系统的终端,而是打开Chromium OS的终端==。

[Crosh Window extension download](https://chrome.google.com/webstore/detail/crosh-window/nhbmpbdladcchdhkemlojfjdknjadhmh/related)

==依赖于该插件:==
[Secure Shell App](https://chrome.google.com/webstore/detail/pnhechapfaindjhompbnflcldabbghjo)

### 组合键屏蔽功能与chroot的结合
当使用CLI(Command Line Interface)的时候,希望键盘组合键发送给VT,而不是给Browser处理,此时,该插件就发挥其作用了。

## crouton 维护与更新
1. Check for updates, download the latest version, and see what's new by running croutonversion -u -d -c from the chroot (run croutonversion -h to see what those parameters actually do).
2. Exit the chroot and run sudo sh ~/Downloads/crouton -u -n chrootname. It will update all installed targets.

# enter-chroot startxxx 命令的解释
这是两个命令:```enter-root```和```startxxx```
## enter-chroot
这是进入chroot的命令;==值得一提的是,它后面所跟的参数基本不会对它产生影响==。

sudo enter-chroot startxfce4

1
2
3
4
- enter-chroot后面跟着的startxxx看似是enter-chroot的参数,其实不是,enter-chroot完全不care后面的参数,它只做两件事:
- 进入chroot
- 把它后面跟着的东西作为native raw command转交给进入chroot后的shell进行执行
也就是说,即使我们后面写上一个奇奇怪怪的“参数”:

enter-chroot ls

1
enter-chroot也不会出错,在打印出进入chroot的信息后,chroot内的shell会执行这个参数并打印出命令的结果。

graph LR
enter_chroot–>chroot
enter_chroot.startxxx–>chroot_exec_startxxx
chroot_exec_startxxx–>chroot

1
2
3
### 单独运行enter_chroot
不启动桌面环境,不保证能有窗口或tab弹出来,在安装了crouton extension后能够弹出CLI窗口。
> 在进入chroot后,可以通过xiwi -T/-F cmd来让app运行在tabwindow

sudo enter-chroot xiwi -T /usr/local/code/code

1
以上命令实际上是多条命令,可以分开键入:

sudo -i
enter-chroot
xiwi -T xxx # tab运行xxx
xiwi -F xxx # FullScreen运行xxx

1
2
3
4
5

## startxxx
这个命令所在的路径被添加到了$PATH;因此能够直接在命令行中键入使用。

# 在浏览器的Tab页中运行chroot内的桌面系统

sudo startxfec4 -n chrootname -X xiwi-tab

1
2
3
4
5
- 在tab页上跑chroot内的桌面系统;关闭tab页后,还能在插件Crouton中再次启动。
- 只要用户没有从chroot内的系统中logout,即使关闭标签页,也不会导致chroot内的系统停止。

# 通过一个window或一个browser tab运行Application in chroot
当Chromium OS通过crouton安装了xiwi后,可以不通过桌面环境,直接在一个窗口或标签页中启动chroot内的app。

在一个tab中启动

sudo enter-chroot xiwi -T bin

全屏幕启动

sudo enter-chroot xiwi -F bin

1
2
3
4
5
6
7
8
9
10
命令解析:
enter-chroot后执行命令xiwi -T bin;xiwi命令根据参数将bin的界面显示到指定的位置。bin是chroot内的可执行文件。

## tab运行时特性
在tab中运行时,xiwi会将指定的进程显示到tab中,==当该进程退出时,不论他有没有fork,或invoke其他进程,或带起了其他进程,只要它退出,tab页就会显示进程退出,画面丢失==。如果所运行的程序会启动其他进程,或者进行fork,且希望新进程的界面继续保持显示,就必须向xiwi传递参数```-f```

# 通过crouton实现chroot GO!
> chroot go是对chroot的备份打包、解包和恢复,类似于Windows的安装到U盘,成为随处可用的Windows go。chroot go不是官方名称,是我自己起的名字。

1. backup chroot

sudo edit-chroot -b chrootname

1
2
3
在当前目录下得到以time stamp命名的tarball,备份了整个chroot系统。

2. restore from tarball

sudo edit-chroot -r chrootname

1
2
3
找到拥有最新time stamp的tarball并从中恢复。可以通过-f参数来指定tarball而不需要使用most recent timestamp.tar.gz。

3. Everywhere chroot go

sudo sh ~/Downloads/crouton -f mybackup.tar.gz

1
2
3
4
5
6
7
全新安装chroot系统;适用于从来没有执行过crouton的系统。

# 优化用户体验,提前下载bootstrap文件,快速创建系统,免除下载等待
- 首次运行crouton安装系统,要下载大量文件,耗时,waste...
- 通过crouton安装多个系统,每次安装都有下载文件,而且还是相同的重复文件,waste...

## 提前下载bootstarp files

sudo sh ~/Downloads/crouton -d -f ~/Downloads/mybootstrap.tar.bz2

1
2
3
4
- 追加参数:可以通过-r来选择安装的发行版
- 追加参数:可以通过-t来选择桌面环境(如内嵌到Chromium OS Browser使用-t xiwi;使用独立的unity:-t unity;)

使用已经下载好的文件进行安装:(可以利用该命令来安装定制过的系统)

sudo sh ~/Downloads/crouton -f ~/Downloads/mybootstrap.tar.bz2 -t xxx

1
2
3
4
5
> 该命令在上面介绍过了,通过-f参数指定tarball进行安装。

需要注意的是:该方法可能需要追加-t参数,显式通知crouton该tarball内使用的是那种桌面环境,保证crouton已经安装了该桌面环境对应的设施。

# 毁灭你的chroot

sudo delete-chroot chrootname

1
等同于:

sudo edit-chroot -d chrootname

1
2
3
4

# 启动多个chroot
> Chroot is cheap.
文档显示:Chroot开销不大。可以通过-n参数启动多个chroot。

sudo enter-chroot startunity -n

- 该功能是chroot的功能,-n参数是enter-chroot命令的参数,不是startxxx的参数
- 如果不追加-n参数,存在已有chroot并且已经进入时,命令执行失败。追加-n参数,即使同一个chroot已经被进入了,仍然可以再次启动一个新的chroot内系统。

> crouton的-n是指定chrootname,这里的-n是多次启动一个chroot内的系统。

# 确保真正shutdown chroot内的系统
1. ==在crouton extension已经安装的情况下,所有显示chroot内的系统的tab或window在被关闭后,都不会真正退出。==
2. 在浏览器插件那里能够看到正在运行的chroot系统。
3. 关闭chroot内的系统的真正办法是:用户logout系统会话。
    1. 若有桌面环境:单击logout
    2. 通过chroot内命令行:键入logout命令
    3. 仅CLI界面:logout命令或Ctrl + D向VT发出logout信号

## 特性
为了使用户能够快速回到chroot环境,所有单击关闭按钮所得到的关闭操作,不会真正关闭chroot内的系统。只有当用户从chroot内系统logout后,才会关闭系统(chroot内关机)。
- 确定跑了几个chroot内系统:通过crouton extension查看。

## (窗口或tab)被关闭的Chroot内系统可以通过Crouton extension重新打开而不需要重新启动chroot内系统

# misc
1. ```-t touch```Improves touch support.不带该参数也能支持触摸。
2. ```/etc/crouton/shares```在Chromium OS和chroot之间共享目录。