当前位置: 首页 > 工具软件 > Chromium OS > 使用案例 >

Chromium OS并行运行Linux chroot运行Linux

陆俭
2023-12-01

本人博客已经迁移到nasdaqgodzilla.github.io

crouton概述

crouton: ChRomium Os Universal chrooT EnvirONment

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

-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

该命令启动并进入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

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

在CrOS和chroot之间切换:

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

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

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

Single-App 单App模式

sudo crouton -t xiwi

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

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

在使用xiwi的情况下临时使用X11进行启动

如果希望使用xiwi的同时临时使用X11,可以通过-X参数:

sudo enter-chroot startgnome -X xiwi

该模式下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中安装croutonextension。然后把chroot系统内的所有browser都卸载掉。这时在chroot内打开的url都会由Chromium OS的Chromium进行处理。

让chroot内的应用以窗口形式直接内嵌显示在Chromium OS

  • crouton extension
  • xiwi

Download crouton extension

crouton extension download

在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

命令解释:

  • -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

依赖于该插件:
Secure Shell App

组合键屏蔽功能与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-rootstartxxx

enter-chroot

这是进入chroot的命令;值得一提的是,它后面所跟的参数基本不会对它产生影响

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

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

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

单独运行enter_chroot

不启动桌面环境,不保证能有窗口或tab弹出来,在安装了crouton extension后能够弹出CLI窗口。

在进入chroot后,可以通过xiwi -T/-F cmd来让app运行在tab或window。

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

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

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

startxxx

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

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

sudo startxfec4 -n chrootname -X xiwi-tab
  • 在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

命令解析:
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

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

  1. restore from tarball
sudo edit-chroot -r chrootname

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

  1. Everywhere chroot go
sudo sh ~/Downloads/crouton -f mybackup.tar.gz

全新安装chroot系统;适用于从来没有执行过crouton的系统。

优化用户体验,提前下载bootstrap文件,快速创建系统,免除下载等待

  • 首次运行crouton安装系统,要下载大量文件,耗时,waste…
  • 通过crouton安装多个系统,每次安装都有下载文件,而且还是相同的重复文件,waste…

提前下载bootstarp files

sudo sh ~/Downloads/crouton -d -f ~/Downloads/mybootstrap.tar.bz2
  • 追加参数:可以通过-r来选择安装的发行版
  • 追加参数:可以通过-t来选择桌面环境(如内嵌到Chromium OS Browser使用-t xiwi;使用独立的unity:-t unity;)

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

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

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

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

毁灭你的chroot

sudo delete-chroot chrootname

等同于:

sudo edit-chroot -d chrootname

启动多个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 touchImproves touch support.不带该参数也能支持触摸。
  2. /etc/crouton/shares在Chromium OS和chroot之间共享目录。
 类似资料: