ラベル Chromebook の投稿を表示しています。 すべての投稿を表示
ラベル Chromebook の投稿を表示しています。 すべての投稿を表示

2023-12-03

【備忘録】Linux コンテナのアップグレード

Google ChromeOS は、Google が設計した OS です。Linux カーネルをベースにしており、Google Chrome ウェブブラウザをメインのユーザインタフェース (UI) として使用しています。そのため、ChromeOS は主にウェブアプリケーションをサポートしています。ChromeOS 上で Linux の仮想環境(Linux コンテナ)を利用できます。

Chromebook の Linux コンテナは現在のところ Debian 11 が採用されていますが、Debian プロジェクトは既に Debian 12 をリリースしています。新しい Debian 12 を使った方が都合の良い場合があるので、手作業で Linux コンテナをアップグレードしてみました。

今回のテーマ

Chromebook の Linux コンテナの Debian 11 を Debian 12 へアップグレードする。

参考サイト [1] の情報をもとにして何度も確認した上でまとめていますが、それでも非公式なやり方に過ぎませんので、本記事に従ってアップグレードする際には、自己責任において実施するようお願いいたします。

下記の ARM 系プロセッサを搭載した、古い Chromebook で動作確認をしています。

Chromebook: Lenovo Ideapad Duet (MediaTek P60T)
Google ChromeOS 119.0.6045.158 (Official Build)  (32 bit)

Debian 11 から 12 へのアップグレード

Chromebook で Linux コンテナを用意します。

まず、下記のコマンドを実行して Debian 11 (bullseye) のシステム全体を最新の状態に更新します。

~$ sudo apt update && sudo apt dist-upgrade -y

次に下記の2つのファイルの内容で、文字列 bullseye を bookworm に置き換えます。

  • /etc/apt/sources.list.d/cros.list
  • /etc/apt/sources.list

管理者権限 (sudo) で vi (vim) エディタを起動して、それぞれのファイルを編集して保存します。赤字の部分が置換した部分です。

~$ sudo vi /etc/apt/sources.list.d/cros.list
...
...
~$ cat /etc/apt/sources.list.d/cros.list
deb https://storage.googleapis.com/cros-packages/119 bookworm main
deb https://deb.debian.org/debian bookworm-backports main
~$ sudo vi /etc/apt/sources.list
...
...
~$ cat /etc/apt/sources.list
# Generated by distrobuilder
deb https://deb.debian.org/debian bookworm main
deb https://deb.debian.org/debian bookworm-updates main
deb https://deb.debian.org/debian-security/ bookworm-security main

再び、下記のコマンドを実行してシステムを最新の状態に更新します。これで Debian 12 (bookworm) に更新されるはずです。

~$ sudo apt update && sudo apt dist-upgrade -y

しばらくして、更新処理が終わります。

一旦「ターミナル」(端末エミュレータ)を閉じて、あらたに「ターミナル」を起動して、hostnamectl コマンドで、OS が Debian 12 (bookworm) に更新されていることを確認します。

以下のコマンドで、依存関係がなくなって不要になったパッケージをアンインストールしておきます。

~$ sudo apt autoremove -y

スクリプトで自動化

Linux コンテナの使い方は人それぞれですが、自分の場合、ほとんど使い捨てに近く、結構な頻度で Linux コンテナを作り直します。簡単に Debian をアップグレードできましたが、毎回同じことをするのは、やはり面倒です。

前述のアップグレードの手順は、レポジトリファイルの文字列の置換がメインですので、スクリプトを用意しておけば1コマンドでアップグレードが出来てしまいます。

以下のスクリプトでアップグレードをできるようにしました。

~$ sudo sh upgrade_debian.sh

Linux のパワーユーザーであればきっと sed で置換するのでしょうが、使い慣れている Python で置換する処理を作りました。😅

upgrade_debian.sh

Python スクリプトでレポジトリファイルの文字列 bullseye を bookworm に置き換えています。

update_info.sh

参考サイト

  1. Update Debian Bullseye (11)to Bookworm (12) in ChromeOS | by Perdana Hadi Sanjaya | Medium [2023-08-21]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2023-12-01

Chrombook と Linux コンテナと PySide6

Google ChromeOS は、Google が設計した OS です。Linux カーネルをベースにしており、Google Chrome ウェブブラウザをメインのユーザインタフェース (UI) として使用しています。そのため、ChromeOS は主にウェブアプリケーションをサポートしています。ChromeOS 上で Linux の仮想環境(Linux コンテナ)を利用できます。

当ブログの記事 [1] で紹介したように、ARM 系プロセッサを搭載した Chromebook の Linux コンテナ上で、Python のモジュール PySide6 を利用できるようになったことが確認できたので、Chromebook を使うモチベーションが高まりました。😁

あらためて、Chromebook で Python/PySide6 のアプリを動かすための設定等についてまとめました。

今回のテーマ
  • Chromebook の Linux コンテナで、Python/PySide6 のアプリを使いたい。
    • ただし、ミニマリストなデスクトップ環境の使い方を追求する。
    • アプリの開発は別のマシンで、この Linux コンテナでは動作確認用あるいは実装環境を想定する。

「ただし、…」は、Linux コンテナだけで全てを実現しようとするのではなく、ChromeOS 側と共用できる部分は、積極的に利用する、ということです。

下記の ARM 系プロセッサを搭載した、古い Chromebook で動作確認をしています。

Chromebook: Lenovo Ideapad Duet (MediaTek P60T)
Google ChromeOS 119.0.6045.158 (Official Build)  (32 bit)

Linux のセットアップ

まず、Chromebook ヘルプ [2] に従って、Chromebook で Linux を使えるようにします。

画面左下のランチャー ○ を選択して、アプリの一覧から「設定」を選択、あるいは、画面右下の時刻を選択して表示されるパネルの右下になる「設定」のギアアイコンを選択して「設定」を起動します。

「設定」画面の「詳細設定」内にある「デベロッパー」を選択します。

「Linux 開発環境」の右側にある  オンにする  ボタンを選択します。

すると Linux 開発環境をセットアップするためのダイアログが表示されるので  次へ  のボタンを選択してセットアップへ進みます。

セットアップ画面において、

ユーザー名は bitwalk としました。

ディスクサイズは「デフォルト」で 10.0GB になっていますが、ここでは「カスタム」を選択して 40.0GB にしています。

 インストール  ボタンを選択してインストールします。

仮想環境へ Linux のインストールが始まります。

インストールが終わると Linux のターミナル(端末エミュレータ)が起動します。

終了するには、ウィンドウ右上の X をクリックします(あるいはターミナル内で exit をタイプします)。

次回、ターミナルを起動するには、画面左下のランチャー ○ を選択して、アプリの一覧から「ターミナル」アイコンを選択します。

すると、下記のようなウィンドウが表示されます。

Linux の下の penguin を選択すると、ターミナル(端末エミュレータ)に変わります。

df コマンドで、ストレージの使用状況を確認すると、40GB 確保した内、39GB が利用可能になっていることが判ります。

あと、いろいろとマウントされているようですが、fonts が /usr/share/fonts にマウントされているのが気になります。あとでアプリで利用できるか確認してみます(PySide6 アプリから利用できるフォント)。

Linux アプリケーション

Linux 固有のアプリは、Chromebook のランチャーで開いたアプリ一覧の「Linux アプリ」グループ内にあるアイコンを選択することで直接起動できます。Linux のインストール直後は、たったひとつですがテキストエディタ Vim が利用できます。

これによって(ちょっとオーバーな表現かもしれませんが)Chromebook の画面を Linux のデスクトップ環境のように扱えます。

この「Linux アプリ」グループへのアイコンの登録方法は後述します(「Linux アプリ」への登録)。

Linux はどのディストロ?

Linux コンテナのディストロには Debian 11 "bullseye" が採用されています。

ターミナル上で hostnamectl コマンドを引数をなにも付けずに入力し、Operating System の行で確認できます。

2023 年 6 月 10 日に Debian 12 "bookworm" がリリースされているので、この Linux コンテナの OS は最新の Debian ではありません。しかし最新でなければ困るということはありませんので、このまま使いつづけることにします。どこかのタイミングで正式に Debian 12 へ切り替わる可能性があります。

日本語入力とロケール

特になにも設定しなくてもターミナル上で日本語の入力ができました。入力中のキャレットのスクリーンショットを撮れなかったので、入力した結果だけ載せました。入力メソッドの切り替えは通常どおり かな/英数 キーです。

localectl コマンドでロケールを確認すると、環境変数 LANG が en_US.UTF-8 になっていますが、日本語入力さえ出来れば、このままでも良いのかもしれません。GUI アプリにおいてデフォルトで選択されるフォントなどに影響があるかどうかは、今後調べる予定です。

キーボードのレイアウトが n/a になっていますが、記号を入力してみると、そのまま正しく入力出来るようです。

とりあえず、このままの設定で Chromebook 側の日本語入力を利用することにします。

タイムゾーン

timedatectl コマンドでタイムゾーンを確認すると、Time zone が Aia/Tokyo (JST, +0900) になっています。

ファイルの操作

ターミナル上でタイプしてファイルの操作ができますが、Chromebook 側の「ファイル」を利用することもできます。

ChromeOS の「ファイル」アプリ

「ファイル」アプリの右上の ⁝ (Tricolon) を選択して、メニューから「非表示ファイルの表示」を選択すると、Linux ファイルの . (Period) で始まる隠しファイルも表示することができます。

Linux 側で Nautilus などのファイラーをインストールせずに、Chromebook 側の「ファイル」を利用することにします。

Python の実行環境

Linux コンテナで、Python/PySide6 のサンプルを実行できるように実行環境を整えます。

Python のモジュールについては、venv で仮想環境を作成して pip コマンドでインストールすることを想定しています。

Debian パッケージのインストール

まず、Python/PySide6 のサンプルプログラムを実行するために必要な Debian パッケージをインストールします。Python はデフォルトで利用できますが、仮想環境を作る venv のパッケージと、モジュールのビルドでコンパイルが必要な部分があるので、gcc と python3-dev もインストールします。

~$ sudo apt-get install gcc python3-dev python3-venv libwebpdemux2 libwebpmux3

※ 不足していたパッケージを追加しました。[2023-12-03]

パッケージのインストールなど、管理者権限が必要な場合は sudo を使いますが、パスワードの入力は要求されません。

サンプルプログラムと関連モジュールの取得

例として MyProjects というディレクトリを作成して、そこに PySide6 のサンプルプログラムをクローンします。なお、git コマンドはデフォルトで利用できます。

※ ディレクトリ名や実行するサンプルなどは、好みに応じて適宜読み替えてください。

~$ mkdir MyProjects
~$ cd MyProjects
~/MyProjects$ git clone https://github.com/bitwalk123/PySide6_sample.git
...
...
~/MyProjects$ cd PySide6_sample
~/MyProjects/PySide6_sample$ python3 -m venv venv
~/MyProjects/PySide6_sample$ source venv/bin/activate
(venv) ~/MyProjects/PySide6_sample$ pip install -r requriements
...
...
(venv) ~/MyProjects/PySide6_sample$ python hello.py

試しに hello.py を実行しました。なにやら警告らしきメッセージが出ていますが、とりあえず期待通りに実行できています。

PySide6 アプリから利用できるフォント

Chromebook の Linux コンテナから実行した PySide6 の GUI アプリが利用できるフォントを、PySide6_sample 内にある PySide6 のサンプルプログラム qt_fontdialog.py を実行して確認しました。

(venv) ~/MyProjects/PySide6_sample$ python qt_fontdialog.py

「Select Font」と表示されたボタンをクリック(選択)すると、フォントを選択するダイアログが表示されます。Google の Noto フォントをはじめとして、多くのフォントを利用できることが確認できます。

残念ながら、このダイアログの OK ボタンをクリック(選択)すると、アプリが落ちてしまいます。

Fedora Linux で同サンプルを作り、動作確認をした限りでは問題が無かったのですが…、原因を調べます。💦

※ ダイアログ系のウィジェットはどれも同じように落ちてしまうことが判りました。解決策を探ります。

JupyterLab の利用

PySide6 のサンプルに使用している PySide6_sample のレポジトリに用意した requirement.txt には、JupyterLab を使うためのモジュールも含めてあります。

以下のように JupyterLab を起動してみます。

(venv) ~/MyProjects/PySide6_sample$ jupyter lab

すると、Chromebook 側の Chrome ブラウザが起動して、JupyterLab が利用できるようになります。

Linux コンテナで JupyterLab を使う場合、Linux コンテナ側でわざわざインターネットブラウザをインストールする必要はなさそうです。

「Linux アプリ」への登録

Chromebook のランチャーで開くアプリ一覧の中に、「Linux アプリ」グループがあり、その中にアプリのアイコンが登録される仕組みは、GNOME のアプリ一覧へのアイコン登録と同じだと思われます。

すなわち、アプリ一覧にアイコンとして表示したいアプリは、/usr/share/applications の中に、アプリの起動などに関する情報を記載した、拡張子 .desktop の付いたテキストファイル(以降、「desktop ファイル」と呼びます)を格納しておきます。

この desktop ファイルの記載は、FreeDesktop.org のサイトにある Desktop Entry Specification [3] で定められているのですが、内容が詳細過ぎて読むのが大変なので、とりあえず既存の desktop ファイルを参考にしています。

しかし、個人のアプリ用の起動アイコンの情報を /usr/share/applications に格納するのは現実的ではありません。

個人のアプリの場合は、$HOME/.share/share/applications 内に desktop ファイルを格納します。

calculator.py の例

ここでは、PySide6_sample のレポジトリ内にある calculator.py を例に説明します。これは単純な電卓プログラムです。

(venv) ~/MyProjects/PySide6_sample$ python calculator.py

Fedora Workstation 39 (GNOME) の電卓アプリ gnome-calculator の desktop ファイル、

/usr/share/applications/org.gnome.Calculator.desktop

の内容を参考にして、PySide6_sample のレポジトリ内に、この電卓プログラム用に desktop ファイルを用意しました。

calculator,desktop
[Desktop Entry]
Name=Calculator (PySide6)
Name[ja]=電卓 (PySide6)
Comment=Normal calculator
Comment[ja]=通常の電卓
Keywords=calculation;arithmetic;
Keywords[ja]=calculation;算術;calculator;計算機;
Exec=/home/bitwalk/MyProjects/PySide6_sample/calculator.sh
Icon=/home/bitwalk/MyProjects/PySide6_sample/calculator.png
Terminal=false
Type=Application
StartupNotify=true
Categories=Utility;
X-Purism-FormFactor=Workstation;Mobile;

Exec=/home/bitwalk/MyProjects/PySide6_sample/calculator.sh は、下記のシェルスクリプトで、ワーキングディレクトリをこのシェルスクリプトがあるディレクトリへ移動させ、Python の仮想環境をアクティベートして、python コマンドで calculator.py を実行するという内容です。

calculator,sh
#!/bin/bash
cd "$(dirname ${0})" || exit
source venv/bin/activate
python calculator.py

Icon=/home/bitwalk/MyProjects/PySide6_sample/calculator.png は、下記の 128 x 128 pixel の画像ファイルです。

このように、ファイルの場所をハードコーディングしていますので、同じように試してみる場合には、適宜、お使いの環境に合うように修正してください。

さて、calculator.desktop ファイルですが、アカウント内に格納先のディレクトリを作成して、そこへこの desktop ファイルをコピーします。

(venv) ~/MyProjects/PySide6_sample$ mkdir -p ~/.local/share/applications
(venv) ~/MyProjects/PySide6_sample$ cp calculations,desktop ~/.local/share/applications/

すると、Chromebook のランチャーで開くアプリ一覧の「Linux アプリ」グループ内に電卓アイコンが追加されます。

電卓アイコンを選択すると、画面中央に calculator.py のウィンドウが表示されます。

このように、個人のアプリの起動アイコンをアプリ一覧に追加するには、ひと手間かかりますが、個人で作ったアプリを頻繁に使いたい場合には、やり方を知っておくと便利です。

まとめ

個人的に Chromebook を使う動機は Linux コンテナを利用できることなのですが、詳しくは次の2点にまとめることができます。

  1. x86_64 系以外のプロセッサで Linux を使ってみたい。
  2. Linux でタッチスクリーンを使いたい。

タッチスクリーンについては、廉価な中華 PC ばかり買って Linux 化している自分にとって、いつも難しい課題です。ARM 系プロセッサを搭載した Chromebook の Linux コンテナを使えば、上記2点を叶えられ、タッチスクリーンを考慮した GUI アプリの操作性の追求ができます。😁

Chromebook (ChromeOS) は、Android SDK のようにアプリの開発環境が広く公開されてはいませんが、その代わりに Linux コンテナをうまく活用すれば、Linux のアプリ開発の成果をそのまま利用できそうです。

なお、Intel 系のプロセッサを搭載した中華 PC に ChromeOS Flex をインストールしたところ、タッチすクリーンが使えて、Linux コンテナも利用できるものがあるので、別記事でまとめる予定です。

追記

どうやら、Wayland を利用している Qt6 ベースの PySide6 を利用するには、Debian 12 へアップグレードした方が良さそうです。x86_64 ベースの ChromeOS Flex で確認していて問題に気がつきました。 ← もうすこし調べる必要があるので、一旦取り消しにします。[2023-12-03]

Debian のアップグレードについては、もうすこし調べた後に、あらためてまとめます。

参考サイト

  1. bitWalk's: Chromebook の Linux コンテナ [2023-11-26]
  2. Chromebook で Linux をセットアップする - Chromebook ヘルプ
  3. Desktop Entry Specification

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2023-11-26

Chromebook の Linux コンテナ

Google ChromeOS は、Google が設計した OS です。Linux カーネルをベースにしており、Google Chrome ウェブブラウザをメインのユーザインタフェース (UI) として使用しています。そのため、ChromeOS は主にウェブアプリケーションをサポートしています。

2年ほど前、家電量販店のコジマで見かけて衝動買いをした Lenovo Ideapad Duet が、自分が持っている唯一の ARM 系プロセッサを搭載した Chromebook です [1] [2]。ChromeOS では Linux のコンテナ (Debian 11) を起動できます [3]。

ChromeOS で起動した Linux コンテナ

Linux が利用できるだから、Python で GUI アプリを作って Chromebook でも利用しようと意気込んだのですが、当時 ARM プロセッサ対応の PySide6 が pip (Python Package Index, PyPI) で利用できなかったので、やむなく Kivy を評価し始めましたが、長続きしませんでした。😭

自分が作りたい類の GUI アプリは、チャートやテーブルを多用するので、PySide6 の方が圧倒的に作りやすかったからです。

そんな PySide6 ですが、現行バージョン 6.6.0 で ARM プロセッサーにも対応したようです。😁

ARM 版 Chromebook の hello.py (PySide6) の実行例

なんだか俄然、Chromebook で Linux コンテナを利用するモチベーションがあがってきました。Lenovo Ideapad Duet に搭載されているプロセッサは MediaTek® P60T (8C, 4x A73 @2.0GHz + 4x A53 @2.0GHz) 、新しいプロセッサではないので非力です。しかし、ARM 系プロセッサを(Andoroid を除く)Linux でじっくり使ったことがないので、Chromebook の Linux コンテナでしばらく使い込んでみたいと思っています。

また、Chromebook の Linux コンテナ上で Python の GUI プログラムを利用するにあたって、調べたことなどを紹介していく予定です。

使用したサンプル

hello.py

日本でも来年になったら発売されるかもしれない Chromebook Plus のプロセッサは、プロセッサの対象が x86_64 系だけのようで残念ですが[4] [5]、手頃な価格な ARM プロセッサ搭載の Chromebook で、ストレージ容量が大きければ買ってしまうかもしれません。、

参考サイト

  1. bitWalk's: Lenovo Ideapad Duet を衝動買い [2021-10-02]
  2. IdeaPad Duet Chromebook|コンパクト 2 in 1 タブレット|ZA6F0019JP | レノボ・ ジャパン
  3. Chromebook で Linux をセットアップする - Chromebook ヘルプ
  4. Chromebook Plus: more performance and AI capabilities [2023-10-02]
  5. Google、高品質でAI搭載の「Chromebook Plus」を定義 399ドルから - ITmedia NEWS [2023-10-03]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加