silentselene 发布的文章

更改系统默认语言

安装语言包

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

/usr/share/applications路径下添加应用名.desktop文件。

应用名必须为英文,其中首字母应该要大写(暂未确定是否一定要大写)。
实际上该文件名可以是任意字符串,不一定需要是应用名,但是为了便于管理建议以应用名命名。

以下为我自己创建的Studio.desktop文件内容示例:

[Desktop Entry]
Name =AndroidStudio
Comment =android studio
Exec =/home/oopsvpwowlq/bin/android-studio/bin/studio.sh
Icon =/home/oopsvpwowlq/bin/android-studio/bin/studio.png
Terminal =false
Type =Application

其中
Name字段为在Launcher中显示的应用名
Comment在传统Linux桌面环境中似乎应该是鼠标长时间停留后给出的提示,但 Chrome OS 并无此功能,故似乎无用
Exec为你的应用程序的可执行文件的路径
Icon为你的应用程序的路径
最后两个字段通常情况下照搬即可,如果有特殊要求请自行上网查找 Linux桌面图标相关内容。


常见问题:

  • 为什么在打开后在任务栏中应用的图标变成了默认的小企鹅图标?
    目前来看出现这种问题的程序会首先有一个启动界面,之后启动界面消失产生应用主窗口,图标变为默认。
    本人暂未找到解决方案,一个未经实践的可能的解决方案是使用.svg格式的图片作为图标,如果该方案有效欢迎在评论区指出。
  • 为什么我在修改.desktop文件后Launcher中的图标没有变化?
    系统似乎并不会检测.desktop文件内容的变更。
    解决方案将你的.desktop文件更名,例如将Studio.desktop文件更名为Studio2.desktop文件,以此方式来使系统更新图标。当然图标变更后你也可以将文件名改回去。

安装以下两个插件

  • Secure Shell App 谷歌官方的 SSH 插件,作为下一个插件的依赖
  • Crosh Window Chromium OS 开发组为 Chrome OS 设计的插件,用来启动单独的命令行窗口避免热键冲突

安装完以上两个插件后在主界面找到Crosh Window点击运行即可。
注意:

  • 如果仅安装第二个插件,每次点开会都是空白页。
  • 即使两个插件都安装了,第一次点开仍可能是空白页,关闭后重新打开即可。

用这种方法可以在termina不可用的时候起到与termina等同的作用

有的时候在重启之后会出现点击termina等其他linux应用点击之后一直无法打开的情况。可以尝试使用以下解决方案:

  • ctrl+alt+t 打开命令行界面
  • 输入 vmc list 如果没有 termina 说明虚拟机完全损坏,需要重新安装Linux on ChromeOS
  • 如果存在 termina 输入 `vmc start termina' 进入vm环境
  • 输入 lxc list 查看是否存在 penguin 的项,如果不存在则需要重新安装Linux on ChromeOS
  • 如果存在 penguin 项尝试输入 lxc start termina 如果没有任何提示,输入 lxc list 后发现是 RUNNING 状态说明可以成功运行。
  • 如果出现诸如 error: Missing source '/run/sshd/penguin/authorized_keys' for disk 'ssh_authorized_keys' 的错误则存在以下两种解决方案

    • 发布(备份)并删除原虚拟机后重新安装(速度较慢,取决于虚拟机大小):

      • 依次输入如下命令
      • lxc publish penguin --alias backup
      • lxc delete penguin
      • lxc init backup penguin
      • lxc start penguin
      • 其中第一步运行速度较慢,请耐心等待,如果不确定程序是否正常进行可以另外开一个终端进入 termina ,输入 top 观察是否存在 gziplxc 命令占据大量CPU或内存资源。
    • 尝试创建需要的文件令它再次工作:

      • 输入 ls /run/sshd/ 观察是否存在文件夹(通常情况下没有,如果有 penguin 文件夹则无需再次建立)
      • 输入 mkdir /run/sshd/penguin 建立文件夹
      • 输入 touch /run/sshd/penguin/authorized_keys 创建文件
      • 输入 lxc start penguin 观察是否有新错误发生
      • 如果有新错误重复上述 touch 命令,将 authorized_keys 替换成新错误缺失的文件,直到不再发生错误为止
      • 19-3-11更新

        • 对于 error: Missing source '/run/tokens/penguin_token' for disk 'container_token'问题,以上方法无效,使用这个命令echo hello-world > /run/tokens/penguin_token之后即可解决
  • 输入 lxc list ,此时状态是 RUNNING 说明可以成功运行。
  • 输入 run_container.sh --container_name penguin --user [你的用户名] --shell 将其中的[你的用户名](不含中括号)替换成你创建的crostini的用户名(通常是你的谷歌账号)

之后可以在这个界面中正常运行GUI程序,原来的termina将不可使用,files应用中也不可以打开linux文件,暂未找到解决方案。此时可以考虑暂用使用单独的窗口打开命令行避免与浏览器热键冲突来实现与termina相同的效果。

参考资料


19-3-11更新

不知道什么原因,每次重启之后很可能termina就不能直接使用了,但是使用一段时间(不关机,不使用的时候仅合上盖子)后就可以正常使用。

19-6-29更新

随着系统版本的更新与系统稳定性的增强,我已经很久没有出现termina出问题的情况了,这篇文章也许不再那么有用了。

本篇暂时作为个人的笔记使用,可读性可能较差

在前几个月的某次更新后,设置里出现了悄悄的出现了一个Linux(Beta)的选项,这允许你使用官方的Linux支持,并且使用一个完全与Chrome OS共生的系统,而不再是像crouton那样为了使用一个图形应用程序而安装一套完整的桌面环境。

  • 在设置中启用Linux,注意需要翻墙并且有可能无法通过使用本机的翻墙方式需要使用路由器做到完全翻墙(待考证,个人认为原因是Chrome OS的翻墙无法影响到共生的Linux),如果出现错误尝试直接点击重试而不是取消后删除进度重来。
  • 安装好之后的系统是Debian 9,支持图形应用,在应用中找到Terminals直接运行即可。
  • 在ctrl+alt+t中输入vmc list可以看到当前的vmc容器(个人理解,不清楚具体叫法),使用vmc start termina可以进入一个不同于shell的命令行。

使用lxc查看与子系统相关的命令,参照网络上的解释,似乎是Chrome OS嵌套VM嵌套子Liunx系统三重嵌套。

使用类似lxc launch images:ubuntu/xenial xenial的命令可以建立新的子系统,参照网络上的资料似乎以此方式新建的不支持图形化的程序,仅以默认方式建立的才支持(从Terminals中直接运行即可),不过影响并不大,即使是ubuntu也是基于debian的(大概)。支持的系统列表参照这里 https://us.images.linuxcontainers.org/

子系统除了提示给出的操作外可以通过如下方式运行

run_container.sh --container_name xenial --shell --user root

lxc exec xenial -- /bin/bash

参考资料:
https://www.reddit.com/r/Crostini/comments/8ayrnl/creating_other_lxc_containers/
http://linuxiumcomau.blogspot.com/2018/08/introduction-to-crostini-part-3-using.html
https://www.reddit.com/r/Crostini/comments/94oja4/making_ubuntu_the_default_container_in_crostini/
https://www.reddit.com/r/Crostini/comments/8ju1lx/terminal_suddenly_failing_to_start/
https://blog.google/products/chromebooks/linux-on-chromebooks/
https://www.reddit.com/r/Crostini/comments/9hhk0o/error_installimg_linux_on_pixelbook/

鉴于Crostini稳定性太差(我是崩过好几次),如果要稳定的开发环境建议使用crouton,或者随时备份同步自己的代码到云端。

(这个问题似乎可以改善,参照下一篇文章)

19-6-29更新

鉴于现在的稳定性已经有很大的改善(也可能是因为笔者使用的是Beta channel),已经很长时间没有将crouton作为生产环境了。

来自crouton官方的对比推荐:

Crostini is an official project within Chromium OS to bring the Linux shell and apps to the platform in verified mode with clean integration, multi-layered security, and all the polish you expect from Chromium OS proper.

That means compared to crouton, Crostini has official support, competent engineers, and code that looks a little less like ramen. crouton, in its defense, has wider device compatibility, enables direct hardware access, and is named after an objectively tastier bread-based food item.

There's a solid community on Reddit if you'd like to try Crostini out. If it works for you -- great! No hard feelings. If in the end you decide that crouton suits you better, read on!

Note: you can't get the best of both worlds by installing crouton inside of Crostini. The technology (and life itself) just doesn't work that way. Not to mention a crouton Crostini would look ridiculous and be impossible to eat without getting bits everywhere.