投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償、寄付歓迎) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★

2024年9月7日土曜日

【Raspberry Pi 5】リモートアクセスも可能な日本語デスクトップマシンを構築する【MATE】

 ここでは、Raspberry Pi 5に、基本となるOS「Raspberry Pi OS Lite」に、追加でソフトウェアを構築、設定して、デスクトップ環境構築する手順についてまとめている。
 このように基本となる軽量OSに必要なパッケージを加えていくことによって、余計なものが入っていない自分にとって見通しのよいデスクトップ環境を構築できる。
 
 この手順では、デスクトップ環境としてMATEを導入した。リモートデスクトップ接続、日本語入力ができるようにセットアップする手順も説明している。
 また、最終的に「NVMe M.2 SSD」から起動するようにセットアップを行った。
 
 今後も、デスクトップ環境を充実させるために、追加の設定を行っていく予定である。



<目次>
 
・Raspberry Pi 5で、デスクトップマシンを構築しようと思い立った理由
・デスクトップパソコン構築のために用意したもの
 
(インストール作業)
・「Raspberry Pi OS Lite」をマイクロSDカードにコピーする
・Raspberry Pi 5で基本システムの起動〜初期設定、システム更新、SSH接続設定
・(必要に応じて)sshリモート接続の設定を行う
・ タイムゾーン、ロケールの設定
・デスクトップ環境MATEをインストールと設定
・(必要に応じて)リモートデスクトップ接続するための設定
・日本語入力をできるようにする
 
・「NVMe M.2 SSD」に構築済みシステムをコピーしRaspberry Pi 5を起動
・Raspberry Pi 5のPCIeインターフェイスの速度を向上させる



■ Raspberry Pi 5で、デスクトップマシンを構築しようと思い立った理由

◯ Raspberry Pi 5の性能の高さ
 
・Raspberry Pi 5は、マイクロSDだけでなく、NVMe M.2 SSDを起動もできるメインドライブとして利用できる。
 
・CPUの処理性能が高い
 
・USB3.0ポート搭載
 
・メインメモリは8GBも搭載(8GB搭載モデル)。

 耐久性のあるNVMe M.2 SSDを利用できるようになったので、従来型ラズパイでのマイクロSDの書き込みに伴う劣化と破壊を気にする必要がなくなった。これは日々のデスクトップパソコンとして利用するために欠かすことのできない要件ではないかと思う。


◯ ソフトウェアが無料で使える

 また、Linuxをはじめとし、デスクトップ環境、ブラウザやオフィスソフト等に至るまで、すべてオープンソフトウェアで構築できるので、ソフトウェアのライセンスを気にする必要がなくなる。


◯ メンテナンスが楽

 ソフトウェアが無料で使えたり、ハードウェアがRaspberry Pi 5として供給されることは、メンテナンスの面でも功を奏する。最初に一台のマシンの設定を済ませてしまえば、残りのマシンへはそのセットアップ済みディスク内容を丸ごとコピーするだけで良いからだ。このことはまた、何かトラブルが生じた場合にも、バックアップしておいたディスク内容をコピーするだけで復旧作業が済むので非常に簡単になる。作業はディスク内容をコピーするだけなので、Linuxの標準的なコマンドででき、特別なソフトウェアを用意する必要もない。


◯ オンラインを絡めたアカウントの管理が要らない

 Linux OSを使うためには何かオンラインアカウントを取得する必要もない。したがって、SMSやメールアカウント等を用いたアカウント管理に煩わされることがなくなる。PCの用途によってはわざわざオンラインアカウントを取得し管理するまでもない。何かに強制されることもなく、昔のように自身の考えるポリシーに基づいて運用ができる。



■ デスクトップパソコン構築のために用意したもの

・Raspberry Pi 5(8GBメモリ搭載モデル)
・Raspberry Pi 5専用の電源アダプター
・ケースおよびヒートシンク(NVMe M.2 SSDを内蔵できるもの)
・NVMe M.2 SSDをラズパイに取り付けるための拡張カード(ケースに内蔵されている場合は不要)
・NVMe M.2 SSD 
・NVMe M.2 SSD USB接続アダプター(SDからデータを転送する時に用いた)
・マイクロSD(16GB程度、書き込み速度が速いタイプがよい)
・HDMIケーブル(ラズパイ側はHDMI マイクロタイプDオス端子、ディスプレイ側にも合わせる)
・HDMI対応ディスプレイ
・キーボード、マウス(USB接続タイプ)
・別の作業用Linuxマシン
・インターネットに接続できるLAN環境(DHCPで設定自動配布がされること)

 本体を組み立てる際、「NVMe M.2 SSD」はまだ取り外しておく。
 「NVMe M.2 SSD」は一番最後の手順で、セットアップの完了した「マイクロSD」の内容をコピーしたものを取り付ける。



■ (インストール作業)「Raspberry Pi OS Lite」をマイクロSDカードにコピーする

 この作業では別のパソコンが必要である。以下の手順では、Linuxマシンを用いている。
(Windowsで行う場合は、ラズパイ公式の専用ツールを使うと良いらしい。ここでは解説しない。)

◯ マイクロSDに、基本となる軽量のOSディスクイメージをインストール

(Linuxマシンを利用する手順)

1、公式サイトから軽量OS「Raspberry Pi OS Lite」のディスクイメージをダウンロード


Raspberry Pi OS Lite

Release date: March 15th 2024
System: 64-bit
Kernel version: 6.6
Debian version: 12 (bookworm)
Size: 414MB

 これは、この作業時に最新のバージョンのものである。更新されていればそれを使用すると良いと思う。


2、ダウンロードしたxz形式圧縮ファイルを展開

$ xz -dv 2024-03-15-raspios-bookworm-arm64-lite.img.xz

2024-03-15-raspios-bookworm-arm64-lite.img.xz (1/1)
  100 %     414.2 MiB / 2,640.0 MiB = 0.157    26 MiB/s       1:41             

 2.6GBほどの次のimgファイルが展開された。

$ ls
2024-03-15-raspios-bookworm-arm64-lite.img


 ダウンロードしたimgファイルの中身は、OSのディスクイメージである。OSのディスクイメージとは、OSがインストールされた「ディスクの状態」を丸ごと固めたものである。この中には、ファイルや、そのファイルを格納するファイルシステム、そのファイルシステムを記録するパーティション、そのパーティションを管理したり、システムを起動したりする役割を持つMBR(マスターブートレコード)などがすべて含まれている。
 したがって、このimgファイルは次に述べるddコマンドを用いて、その中身をマイクロSDカードに丸ごと書き込む。(ファイルのレベルで取り扱ってはいけない。)


3、展開したimgファイルの中身を用意したマイクロSDに書き込む

 下記ddコマンドを参考にして自分の環境に合わせたパラメーターで、imgファイルの中身をマイクロSDに書き込みする。(パラメーターの意味は下記)
 
# dd if='2024-03-15-raspios-bookworm-arm64-lite.img' of=/dev/sdX bs=10M status=progress

 
◯ ddコマンドのパラメーターは次の意味を持っている。

・「of=/dev/sdX」では、認識されたマイクロSDカードのデバイスファイルのパスを指定する(Linuxでは、デバイスはファイルとして抽象化されている)
・「bs=10M」は、シーケンシャルライトの高速書き込み効果をねらい適当に設定(SDカードはシーケンシャルライトが速い)
・「status=progress」で書き込み進捗状況を表示


 このコマンドを実行してしばらく待つと、OSのディスクイメージ「2024-03-15-raspios-bookworm-arm64-lite.img」が丸ごと、マイクロSDカード「/dev/sdX」にシーケンシャルライトで書き込まれる。
 
 書き込みが完了すれば、マイクロSDを取り外す。ただし、書き込み完了後に自動的にマイクロSDの内容がシステムに認識され、マウント状態になっている場合がある。その場合はアンマウントしてから取り外す。



■ Raspberry Pi 5で基本システムの起動〜初期設定、システム更新

◯ 起動準備〜起動

 電源は一番最後の手順でつなぐこと。(電源ケーブルをつなぐと、ラズパイは自動で起動してしまうため。)

・Raspberry Pi 5に、上記手順で「Raspberry Pi OS Lite」のコピーができたマイクロSDを挿し込む。
・Raspberry Pi 5に、ディスプレイ、キーボード、マウス、LANケーブルをつなぐ。(ディスプレイは起動前に必ず接続すること。初期設定では、あとから繋いでも認識されないようになっている。)
・最後に、Raspberry Pi 5に電源(Type-Cケーブル)をつなぐと、システムが起動する。

 一旦起動し青い画面が表示された後、まもなくシステムが自動的に再起動された。(初回起動時に行われる初期化作業がなされたのではないかと思う。)


◯ 初期設定

 システムが起動後、キーボードの言語選択と、ユーザー設定が促された。各々、次のように設定した。


キーボード設定

 利用環境に応じて設定する。私の環境の場合、Raspberry Pi 5には日本語USBキーボードを繋いでいるので次のように設定した。

1、青い画面の「Please select the layout matching the keyboard for this machine.」というTUI(テキストユーザーインターフェイス)が開いた。

2、「Keyboard layout:」一覧から上下キーで「Other」を選択後、[TAB]キーを押し「OK」を選択状態にしてから、エンターを押した。

3、「The layout of keyboard varies per country…」というTUIが開くので、上下キーで「Japanese」を選択後、[TAB]キーを押し「OK」を選択状態にしてから、エンターを押した。

4、続けて開くTUIにおいて、一番上に表示されている「Japanese」を選択後、[TAB]キーを押し「OK」を選択状態にしてから、エンターを押した。


ユーザー設定

 最初に一つユーザーを作成する必要があるようだ。

1、「Please enter ner username:」というTUIにおいて、ユーザー名を設定した。[TAB]キーを押し「OK」を選択状態にしてから、エンターを押した。

2、「Please set a password for …」というTUIにおいて、先程設定したユーザーのパスワードを設定した。[TAB]キーを押し「OK」を選択状態にしてから、エンターを押した。

3、パスワードの確認画面が表示されるので、再入力して確認する。


◯ システムの更新作業

・superユーザーになる

user01@raspberrypi:~ $ sudo su

 以下、「$」なら通常ユーザー、「#」ならスーパーユーザーとして入力するコマンドとする。

・システムの更新(インターネット接続可能なLANケーブルが接続されていること)

# apt update
# apt upgrade -y



■ (必要に応じて)sshリモート接続の設定を行う

 いつもの使いなれたコンピューターからリモートでラズパイに接続して、以後の設定が出来る。次のページを参考にする。




■ タイムゾーン、ロケールの設定

 国によって、時刻は異なるし、言語なども異なる。国に応じた振る舞いをシステムにさせるための設定をここで行う。設定すれば、日本時間となり、後でセットアップするデスクトップ環境は日本語で表示されるようになる。


◯ 設定

 次のコマンドを実行すると、設定用のTUI(テキストユーザーインターフェイス)が開く。次のような階層になっているので、項目を指定しながら階層を降りて行き、設定を行う。項目の指定はエンターキーで行う。
 以下では、「タイムゾーン」の設定を行った後、つづけて「ロケール」の設定を行っている。

# raspi-config

5 Localisation Options Configure language and regional settings←大分類
L2 Timezone     Configure time zone←タイムゾーン設定
Asia
Tokyo
Current default time zone: 'Asia/Tokyo'
Local time is now:      Sat Jun 22 04:32:55 JST 2024.
Universal Time is now:  Fri Jun 21 19:32:55 UTC 2024.

5 Localisation Options Configure language and regional settings←大分類
L1 Locale       Configure language and regional settings←ロケール設定
[*] en_GB.UTF-8 UTF-8(←そのまま選択状態にしておく
[*] ja_JP.UTF-8 UTF-8 (←スペースキーで選択できる
Default locale for the system environment:
ja_JP.UTF-8 (←デフォルトのロケールとして指定
Generating locales (this might take a while)...
  en_GB.UTF-8... done
  ja_JP.UTF-8... done
Generation complete.

<Finish>


◯ 再起動

# reboot



■ デスクトップ環境MATEをインストールと設定

 今はまだマイクロSDカードからシステムを起動している。後で、この「マイクロSDカード」の内容をディスクイメージとして全て「NVMe M.2 SSD」にコピーする。コピーの前に「マイクロSDカード」に、続けてデスクトップ環境をインストールしておく。

 以下の手順で、基本システムに、デスクトップ環境の一種であるMATEをインストールする。(MATE以外のデスクトップ環境も色々あるので、好みのものを入れることができる。各自で調べてみてください。)


◯ デスクトップ環境MATEと依存パッケージをインストール

・管理者権限を取得

user01@raspberrypi:~ $ sudo su


・MATEのインストール

# apt install tasksel

tasksel is already the newest version (3.73).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.


 次のコマンドは処理が完了するまで結構時間がかかる。

# tasksel install mate-desktop --new-install

パッケージをインストールしています
ファイルを取得しています …/824 (残り 分 秒) 
…を展開しています


・ディスプレイマネージャー(ログインマネージャ)のインストール

# apt install lightdm lightdm-gtk-greeter

lightdm is already the newest version (1.26.0-8+rpt3).
lightdm set to manually installed.
lightdm-gtk-greeter is already the newest version (2.0.8-2+b1).
lightdm-gtk-greeter set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.


◯ デスクトップ環境が自動的に起動するための設定

 ・次のコマンドは、ユーザーごとにそのユーザーの権限で実行する。

 (例)ユーザー名「user01」の場合(sudo user01などで切り替え、設定後、exit)
 
user01@raspberrypi:~ $ echo "mate-session" > /home/user01/.xsession


 ・以下は、全ユーザー共通

# systemctl set-default graphical.target

Removed "/etc/systemd/system/default.target".
Created symlink /etc/systemd/system/default.target → /lib/systemd/system/graphical.target.


# systemctl enable lightdm

Synchronizing state of lightdm.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable lightdm


 ここで、システムを再起動する。

# reboot

 起動後は、グラフィカルログインの画面が表示されている。




■ (必要に応じて)リモートデスクトップ接続するための設定

次のページを参考にして設定を行う。
 




■ 日本語入力をできるようにする

 以下の手順で、IME(input method editor)としてKKCを導入する。これは日本語のローマ字入力をサポートするために必要である。加えて、このIMEが依存するIMF(input method framework)としてIBus(Intelligent Input Bus)というシステムをインストールする。
 
 ところで、KKC以外にも日本語入力を行うIMEはある。例えば、Mozcがある。しかし、今回構築のシステムにおいてはMozcはFirefoxブラウザでのGoogleドキュメントの入力時などで頻回に入力ができなくなる問題が発生したので利用しないことにした。他にもIMEがあるが試していない。
 
1、フレームワークIBusのインストール
 
$ sudo su
 
# apt update
# apt install ibus 
 
 
2、入力メソッドエディタのインストール
 
◎ KKCの場合
 
 今回の環境ではこちらの入力メソッドエディタを使った。
 
# apt install ibus-kkc
 
 
◯ Mozcの場合

 ただし、既に述べたように今回の環境において不具合が発生したので利用しないことにした。(念のためにインストールの手順をメモしておく)
 
# apt install ibus-mozc

ibus (1.5.27-5) を設定しています ...
ibus-mozc (2.28.4715.102+dfsg-2.2) を設定しています ...


3、フレームワークIBusを自動起動する設定
 
  MATEが立ち上がるタイミングでIBusが動作する設定を行った。次のように直接設定内容をファイルに書き込んでも良いし、後述のスタートアップ設定ウインドウにおいて設定しても良い。
 
$ nano /home/user01/.config/autostart/ibus-daemon.desktop

[Desktop Entry]
Type=Application
Exec=/usr/bin/ibus-daemon -drx
Hidden=false
X-MATE-Autostart-enabled=true
Name[ja_JP]=Start ibus daemon
Name=Start ibus daemon
Comment[ja_JP]=AKIRA
Comment=AKIRA
 
 
 次のコマンドでスタートアップ設定ウインドウが開き、スタートアップの登録、また上記で設定したスタートアップの登録内容、有効/無効の状態を確認するためのウインドウが開く。
 
$ mate-session-properties
 
 
 ここで、フレームワークIBusを起動するために、再起動を行った。
 
 
4、入力メソッドエディタKKCの設定を行う
 
 次のページを参考にして、フレームワークiBusに、入力メソッドエディタKKCを登録した。そして、KKCの設定も行う。
 
 
 
 
 
★  以上でシステムの構築作業は完了した。
 
  Raspberry Pi 5を、「poweroff」コマンドでシャットダウンし、「マイクロSD」を取り出しておく。



■ 「NVMe M.2 SSD」に構築済みシステムをコピーしRaspberry Pi 5を起動
 
 以下の作業では別のパソコン(Linuxマシン)を利用した。以下の操作では、操作を誤まると意図しないディスクの内容が破壊されるので注意すること。


◯ マイクロSDの内容を丸ごとイメージファイルにバックアップ

 Linuxパソコンに、さきほど取り外した「マイクロSD」を取り付けて、認識されたマイクロSDカードのデバイスファイルのパスを確認した。

 次のコマンドで、「マイクロSD」の内容をディスクイメージとして吸い出した。

・「/dev/sdX」は、認識されたマイクロSDカードのデバイスファイルのパス(Linuxでは、デバイスはファイルとして抽象化されている)

・「mate_user01_raspios_20240701.img」は、バックアップ先にするファイル名(新規に作成する任意のイメージファイル名)

# dd if=/dev/sdX of='mate_user01_raspios_20240701.img' status=progress


 バックアップが完了したら、この「マイクロSD」は、必要に応じアンマウントし、取り外しておく。


◯ マイクロSDに、基本となる軽量のOSディスクイメージをインストール

 このLinuixパソコンに、用意していた空の「NVMe M.2 SSD」を取り付けた。(「NVMe M.2 SSD USB接続ケース」を用いた。)

 次のコマンドで、先ほど作成したバックアップファイル「mate_user01_raspios_20240701.img」を、「NVMe M.2 SSD」にディスクレベルで書き込んだ。

・「/dev/sdY」は、認識された「NVMe M.2 SSD」のデバイスファイルのパス

# dd if='mate_user01_raspios_20240701.img' of=/dev/sdY status=progress


 書き込みが完了したら、この「NVMe M.2 SSD」を適切に取り外しておく。


◯ 書き込みが完了した「NVMe M.2 SSD」をRaspberry Pi 5に取り付けて起動


 
■ Raspberry Pi 5のPCIeインターフェイスの速度を向上させる
 
◯ PCIe Gen 3を有効にする前(Gen 2.0)の速度の確認

$ sudo su

# hdparm -tT /dev/nvme0n1

/dev/nvme0n1:
 Timing cached reads:   6490 MB in  2.00 seconds = 3247.33 MB/sec
 Timing buffered disk reads: 1142 MB in  3.00 seconds = 380.50 MB/sec


◯ PCIe Gen 3を有効にする

$ sudo su

# raspi-config

Raspberry Pi Software Configuration Tool (raspi-config) 
6 Advanced Options     Configure advanced settings
A8 PCIe Speed              Set PCIe x1 port speed
Would you like PCIe Gen 3 to be enabled? 
<はい>
PCIe Gen 3 is enabled
<Finish>


再起動を行った。

# reboot


◯ PCIe Gen 3を有効後の速度の確認

# hdparm -tT /dev/nvme0n1

/dev/nvme0n1:
 Timing cached reads:   6700 MB in  2.00 seconds = 3352.41 MB/sec
 Timing buffered disk reads: 2252 MB in  3.00 seconds = 750.32 MB/sec




(参考)

● GUIインストール
・Forgot to install the desktop environment while installing debian 12
< https://unix.stackexchange.com/questions/768562/forgot-to-install-the-desktop-environment-while-installing-debian-12 > 2024年6月17日

・Debian specific manpage/TASKSEL(8)
< https://manpages.debian.org/testing/tasksel/tasksel.8.en.html > 2024年6月17日

・Tasksel – Quickly Install Software Groups in Debian and Ubuntu
< https://www.tecmint.com/tasksel-install-group-software-debian-ubuntu/ > 2024年6月17日


● ロケール
・Debianでlocaleの設定
< https://zenn.dev/oto/articles/9d18a4de1a15e5 > 2024年6月17日


● 日本語入力
 
http://akira-arets.blogspot.com/2021/03/linux-docker-mate-desktop-for-multiple-languages.html
 
・【IBus Kana Kanji】【IBus Mozc】VNCリモート接続したMATEデスクトップ環境で日本語入力できるように設定する【Linux CentOS 7】
 
Input method
< https://wiki.archlinux.org/title/Input_method > 2024年8月21日
 
・Input method
< https://en.wikipedia.org/wiki/Input_method > 2024年8月21日

・IBus
< https://wiki.archlinux.org/title/IBus> 2024年8月21日

・Intelligent Input Bus
< https://en.wikipedia.org/wiki/Intelligent_Input_Bus > 2024年6月26日

・Fcitx
< https://en.wikipedia.org/wiki/Fcitx > 2024年6月26日


● PCIe Gen 3.0対応
・Raspberry Pi 5でのPCIe Gen 3.0対応
< https://tkyonezu.com/iot/raspberry-pi-5%E3%81%A7%E3%81%AEpcie-gen-3-0%E5%AF%BE%E5%BF%9C/ > 2024年7月1日

・Forcing PCI Express Gen 3.0 speeds on the Pi 5
< https://www.jeffgeerling.com/blog/2023/forcing-pci-express-gen-30-speeds-on-pi-5 > 2024年7月1日


● その他
・【Linux CentOS7】DockerコンテナにMATEによるLinuxデスクトップ環境を構築する(日本語、複数ユーザー対応)【VNC SERVERによるヘッドレス運用】【No privileged】


2024年9月4日水曜日

【Raspberry Pi 5】ローカルディスプレイのデスクトップ画面をミラーリングするリモートデスクトップ接続の設定方法について

 ■ 概要

  ここでは、安全なローカルネットワーク上にあるRaspberry Pi 5 (Raspberry Pi OS)に、ローカルHDMIディスプレイに表示されるデスクトップをミラーリングしたリモートデスクトップ接続を行う手順を確認している。

 このリモートデスクトップ接続にはVNCを用いているが、Raspberry PiにHDMI接続したディスプレイで通常表示されるデスクトップ画面そのものをミラーリングして、リモートの環境で操作する方法を取り扱っている点が特徴的である。

 通常、ユーザーはRaspberry PiにHDMI接続したディスプレイに表示される画面でログインし、デスクトップ操作を行う。これらのユーザーをリモートからサポートするためには、上記のような方法でのリモートデスクトップ接続が必要である。

 

■ Raspberry Pi 5のHDMIポートに関する注意

 Raspberry Pi 5は、HDMIに関する初期設定のまま、ヘッドレス(HDMI接続ディスプレイなし)で起動すると、内部でローカル画面描画に関するシステムの機能の処理能力を制限するようである。ディスプレイが接続されていないということで省エネを図ろうというのだろうか。

  実際に、下記手順で設定を行い、ローカル画面をミラーリングするリモートデスクトップ接続をしたところ、HDMIに関する初期設定かつヘッドレスの状態では、リモートデスクトップの反応が非常に遅くなった。

 そこで、どうしてもヘッドレス運用したく、しかも、HDMIに関する初期設定のままRaspberry Pi 5を使いたいなら、対処方法として、「ダミーHDMI」のドングルをRaspberry Pi 5のHDMIポートに取り付けておけば、ヘッドレスでもローカル画面をミラーリングしたリモートデスクトップを快適に使うことができた。

 他の対処方法は、HDMIに関する設定を変更することである。(こちらの方が実用的だが、未検証なのでまた取り上げたいと思う。)



■ ローカル画面をミラーリングしてリモートデスクトップ接続するための設定


◯ x11vncのインストール

# apt install x11vnc -y



◯ リモート接続時のパスワードを設定

# mkdir /etc/x11vnc
# touch /etc/x11vnc/passwd

# x11vnc -storepasswd /etc/x11vnc/passwd

Enter VNC password: 
Verify password:    
Write password to /etc/x11vnc/passwd?  [y]/n y
Password written to: /etc/x11vnc/passwd

 ここで、設定したパスワードを「共通VNCパスワード」と呼ぶことにする。



◯ Raspberry Pi 5に割り当てられているIPアドレスの確認

# ip a | grep inet

 ネットワーク環境に依るが、192.168.X.Xのようなアドレスが割り当てられていることが多い。これをメモしておく。リモート接続の際に使用する。



◯ (動作テスト) x11vncの起動(display 0にアタッチ)

 Linuxでは、X ServerというシステムがGUIの画面を取り扱う。(X Serverが、マウス、キーボード入力の受け取り、画面の描画などを担当する。)Linuxでは、このX Serverというシステムを複数起動させることができる。複数のX Serverのうちから一つを指定するための番号が、display番号と呼ばれるものである。

 通常、display番号「0」が参照するX Serverは、ローカルでGUIへのログインを担当する「ウインドウマネージャー」の画面を取り扱っている。そこで、後に示すコマンド(★)を用いて、display番号「0」が参照するX Serverに、x11vncをアタッチする。これによって、ログイン画面をVNC経由でミラーリングできるようになる

 また、この方法で、ログイン後のデスクトップ環境の画面も、引き続きVNC経由でミラーリングできる。つまり、display番号「0」が参照するX Serverは、最初はログインを担当するウインドウマネージャーの画面を取り扱っているが、ログインに成功すると、そのままそのユーザーのデスクトップ画面を取り扱うということである

 次の図の仕組みによって、ローカル側GUI画面と、リモート側画面がミラーリングされる。

(ローカル側画面)X Server(0) ← X11Vnc(5900) ← == ネット== ←Vnc Client (リモート側画面)

(★)

# x11vnc -auth guess -display :0 -rfbauth /etc/x11vnc/passwd -rfbport 5900 -forever -loop -xkb -noxdamage -repeat -shared

 --- x11vnc loop: 1 ---

 --- x11vnc loop: waiting for: 2622

24/06/2024 09:53:37 passing arg to libvncserver: -rfbauth
24/06/2024 09:53:37 passing arg to libvncserver: /home/user01/.vnc/passwd
24/06/2024 09:53:37 passing arg to libvncserver: -rfbport
24/06/2024 09:53:37 passing arg to libvncserver: 5900
24/06/2024 09:53:37 x11vnc version: 0.9.16 lastmod: 2019-01-05  pid: 2622
xauth:  file /root/.Xauthority does not exist
24/06/2024 09:53:37 -auth guess: using 'XAUTHORITY=/var/run/lightdm/root/:0' for disp=':0'
24/06/2024 09:53:37 Using X display :0
24/06/2024 09:53:37 rootwin: 0x39f reswin: 0x600001 dpy: 0x72803770
24/06/2024 09:53:37 
24/06/2024 09:53:37 ------------------ USEFUL INFORMATION ------------------
24/06/2024 09:53:37 
24/06/2024 09:53:37 Wireframing: -wireframe mode is in effect for window moves.
24/06/2024 09:53:37   If this yields undesired behavior (poor response, painting
24/06/2024 09:53:37   errors, etc) it may be disabled:
24/06/2024 09:53:37    - use '-nowf' to disable wireframing completely.
24/06/2024 09:53:37    - use '-nowcr' to disable the Copy Rectangle after the
24/06/2024 09:53:37      moved window is released in the new position.
24/06/2024 09:53:37   Also see the -help entry for tuning parameters.
24/06/2024 09:53:37   You can press 3 Alt_L's (Left "Alt" key) in a row to 
24/06/2024 09:53:37   repaint the screen, also see the -fixscreen option for
24/06/2024 09:53:37   periodic repaints.
24/06/2024 09:53:37 
24/06/2024 09:53:37 XFIXES available on display, resetting cursor mode
24/06/2024 09:53:37   to: '-cursor most'.
24/06/2024 09:53:37   to disable this behavior use: '-cursor arrow'
24/06/2024 09:53:37   or '-noxfixes'.
24/06/2024 09:53:37 using XFIXES for cursor drawing.
24/06/2024 09:53:37 GrabServer control via XTEST.
24/06/2024 09:53:37 
24/06/2024 09:53:37 Scroll Detection: -scrollcopyrect mode is in effect to
24/06/2024 09:53:37   use RECORD extension to try to detect scrolling windows
24/06/2024 09:53:37   (induced by either user keystroke or mouse input).
24/06/2024 09:53:37   If this yields undesired behavior (poor response, painting
24/06/2024 09:53:37   errors, etc) it may be disabled via: '-noscr'
24/06/2024 09:53:37   Also see the -help entry for tuning parameters.
24/06/2024 09:53:37   You can press 3 Alt_L's (Left "Alt" key) in a row to 
24/06/2024 09:53:37   repaint the screen, also see the -fixscreen option for
24/06/2024 09:53:37   periodic repaints.
24/06/2024 09:53:37 X FBPM extension not supported.
24/06/2024 09:53:37 X display is capable of DPMS.
24/06/2024 09:53:37 --------------------------------------------------------
24/06/2024 09:53:37 
24/06/2024 09:53:37 Default visual ID: 0x21
24/06/2024 09:53:37 Read initial data from X display into framebuffer.
24/06/2024 09:53:37 initialize_screen: fb_depth/fb_bpp/fb_Bpl 24/32/4096
24/06/2024 09:53:37 
24/06/2024 09:53:37 X display :0 is 32bpp depth=24 true color
24/06/2024 09:53:37 
24/06/2024 09:53:37 Listening for VNC connections on TCP port 5900
24/06/2024 09:53:37 Listening for VNC connections on TCP6 port 5900
24/06/2024 09:53:37 listen6: bind: Address already in use
24/06/2024 09:53:37 Not listening on IPv6 interface.
24/06/2024 09:53:37 fb read rate: 468 MB/sec
24/06/2024 09:53:37 fast read: reset -wait  ms to: 10
24/06/2024 09:53:37 fast read: reset -defer ms to: 10
24/06/2024 09:53:37 The X server says there are 10 mouse buttons.
24/06/2024 09:53:37 screen setup finished.
24/06/2024 09:53:37 

The VNC desktop is:      raspberrypi:0
PORT=5900

******************************************************************************
Have you tried the x11vnc '-ncache' VNC client-side pixel caching feature yet?

The scheme stores pixel data offscreen on the VNC viewer side for faster
retrieval.  It should work with any VNC viewer.  Try it by running:

    x11vnc -ncache 10 ...

One can also add -ncache_cr for smooth 'copyrect' window motion.
More info: http://www.karlrunge.com/x11vnc/faq.html#faq-client-caching



◯ (動作テスト) リモート接続

 他の端末から、先程確かめたRaspberry Pi 5のアドレス「192.168.X.X」にVNCで接続する。

 今回は、別のLinux端末のTigerVNCクライアントアプリケーションを使って接続した。このとき指定アドレスとポートを次のように指定した。

「192.168.X.X:0」もしくは「192.168.X.X:5900

 先程設定した「共通VNCパスワード」を入力すると、次のようにリモートの操作画面が開いた。

 ここで、ユーザー名(user01)、そのパスワードを入力した。


 すると、次のようにユーザー「user01」のMATEデスクトップ環境の画面に遷移した。



 さらに、ログアウト後、再びログインすることも問題なくできた。

 複数のVnc Clientを接続して、1対多でミラーリングすることもできた。



◯ システム起動時にリモート接続機能を自動起動させる設定

 以上で、手動でコマンドを実行することによって、ローカル画面をミラーリングしてリモートデスクトップを許可する仕組みを整えられたことを確認した。ここでは、このコマンドをシステム起動時に自動で起動するための設定を行う。

 まず、次のように設定ファイルを作成する。この設定ファイル名がサービス名として使用される。X Server(Display番号0)にアタッチするx11vncサービスということから「x11vnc_0」とした。

# nano /etc/systemd/system/x11vnc_0.service

[Unit]
Description=x11vnc (Remote access to X Server 0)
After=network-online.target

[Service]
Type=simple
ExecStart=x11vnc -auth guess -display :0 -rfbauth /etc/x11vnc/passwd -rfbport 5900 -forever -loop -xkb -noxdamage -repeat -shared
ExecStop=/bin/kill -TERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
KillMode=control-group
Restart=on-failure

[Install]
WantedBy=graphical.target


# systemctl daemon-reload
# systemctl enable x11vnc_0

Created symlink /etc/systemd/system/graphical.target.wants/x11vnc_0.service → /etc/systemd/system/x11vnc_0.service.

# reboot

 システムの再起動後、しばらく待つと、テスト動作と同様にしてVNCクライアントからユーザー「user01」のログインを経て、MATEデスクトップ環境を操作できた。



<参考>

● ディスプレイマネージャー
・What is the greeter?/A greeter is a graphical login interface. It's also often called the login screen.
< https://askubuntu.com/questions/1027145/what-is-the-greeter > 2024年6月17日

・LightDM/Greeter
< https://wiki.archlinux.org/title/LightDM > 2024年6月17日


● リモートアクセス
・【備忘録】Ubuntu20.04でx11vncセットアップ
< https://qiita.com/moootoko/items/a489279c26cae68d60d6 > 2024年6月24日


【Raspberry Pi 5 】Raspberry Pi OSにSSHでリモート接続を行う手順【tmux】

 ここでは、安全なローカルネットワーク上にあるRaspberry Pi 5 (Raspberry Pi OS)に、SSHでリモート接続を行う手順を確認している。

 不意な切断でセッションが閉じて動作中コマンドが終了してしまうことを防ぐため、ターミナルマルチプレクサ(Terminal Multiplexer) である「tmux」を用いる方法についても触れている。


■ SSH接続でシステムにリモート接続する
 
 Raspberry Pi 5 (Raspberry Pi OS)にログインし、コマンドを実行できる状態にする
 
 
◯ 次のように空のファイルを作成するだけでリモート接続設定が済む

# touch /boot/firmware/ssh

(IPフィルタが設定されている場合は必要な設定が別途必要である。)


◯ Raspberry Pi 5に割り当てられているIPアドレスの確認

# ip a | grep inet

 ネットワーク環境に依るが、ルーター類のDHCP機能により自動で、192.168.X.Xのようなアドレスが割り当てられていることが多い。これをメモしておく。リモート接続の際に使用する。


◯ tmuxのインストール

 ターミナルマルチプレクサ(Terminal Multiplexer) である「tmux」を導入しておく。これを用いると、リモート接続時コマンド実行中に接続が途切れたとしても、コマンドが強制終了せずに処理が継続されるようになる。また後からそのセッションに再接続することができる。また画面を分割して一つ一つの画面でコマンドプロンプトが使うこともできる。

# apt install tmux -y


 詳しい使い方は他のマニュアルなどを参考にしてください。下記操作方法は一例です。
 
 
セッションを有効にする
・ターミナルマルチプレクサを有効にしセッションを作成するには、「tmux」を実行
 
セッション操作
・セッションから抜ける(バックグラウンドでセッションは動作)には、セッション内で、[ctrl]を押しながら[b]を押下した後、それらをいったん離して、[d]を押下(デタッチ)
・最後に切断したセッションに再接続するには「tmux a」を実行(アタッチ)
 
・動作中セッション番号の一覧を表示するには、「tmux ls」
・動作中セッションの番号を指定して接続するには「tmux a -t X」(Xはセッション番号)
 
・セッション終了するには、セッション内で「exit」を実行
 
画面分割
・画面縦に分割するには、セッション内で 、[ctrl]を押しながら[b]を押下した後、それらをいったん離して、[%]を押下(SHIFTを勿論使う)
・画面横に分割するには、セッション内で 、[ctrl]を押しながら[b]を押下した後、それらをいったん離して、["]を押下(SHIFTを勿論使う)
 
 

◯ 再起動

# reboot


◯ SSH接続でRaspberry Pi 5にログイン

 別のLinuxマシン等のターミナルソフトを用いて、再起動前にメモしておいたIPアドレスにSSH接続してログインする。

 usernameには設定したユーザー名、192.168.X.XにはメモしておいたIPアドレスを指定した。

$ ssh username@192.168.X.X



2024年8月2日金曜日

【Raspberry Pi 5】RDPでリモートデスクトップにアクセスする【Raspberry Pi OS Lite bookworm】

  Raspberry Pi 5に、Raspberry Pi OS Lite (bookworm)をベースとしてMATEデスクトップ環境をインストールして使用している。

 この環境でRDPによるリモートデスクトップにアクセスできるようにした。 これにより、Raspberry PiなどのLinux環境から、例えば、Windowsリモートデスクトップにログインできる。

 他にも色々とリモートデスクトップ用のアプリケーションはあるのだろうと思うが、今回の方法では、シンプルにLinuxコマンドラインから接続先情報を入力してリモートデスクトップ枠を開き操作することができる。

 

 

◯ まず、RDPによるリモートデスクトップを使うためのパッケージを導入した。

 

# apt install freerdp2-x11

以下の追加パッケージがインストールされます:
  libfreerdp-client2-2 libfreerdp2-2 libwinpr2-2


以下のパッケージが新たにインストールされます:
  freerdp2-x11 libfreerdp-client2-2 libfreerdp2-2 libwinpr2-2


アップグレード: 0 個、新規インストール: 4 個、削除: 0 個、保留: 2 個。
1,150 kB のアーカイブを取得する必要があります。
この操作後に追加で 4,805 kB のディスク容量が消費されます。
続行しますか? [Y/n] y


.../libwinpr2-2_2.10.0+dfsg1-1_arm64.deb を展開する準備をしています ...
libwinpr2-2:arm64 (2.10.0+dfsg1-1) を展開しています...
以前に未選択のパッケージ libfreerdp2-2:arm64 を選択しています。
.../libfreerdp2-2_2.10.0+dfsg1-1_arm64.deb を展開する準備をしています ...
libfreerdp2-2:arm64 (2.10.0+dfsg1-1) を展開しています...
以前に未選択のパッケージ libfreerdp-client2-2:arm64 を選択しています。
.../libfreerdp-client2-2_2.10.0+dfsg1-1_arm64.deb を展開する準備をしています ...
libfreerdp-client2-2:arm64 (2.10.0+dfsg1-1) を展開しています...
以前に未選択のパッケージ freerdp2-x11 を選択しています。
.../freerdp2-x11_2.10.0+dfsg1-1_arm64.deb を展開する準備をしています ...
freerdp2-x11 (2.10.0+dfsg1-1) を展開しています...
libwinpr2-2:arm64 (2.10.0+dfsg1-1) を設定しています ...
libfreerdp2-2:arm64 (2.10.0+dfsg1-1) を設定しています ...
libfreerdp-client2-2:arm64 (2.10.0+dfsg1-1) を設定しています ...
freerdp2-x11 (2.10.0+dfsg1-1) を設定しています ...
man-db (2.11.2-2) のトリガを処理しています ...
libc-bin (2.36-9+rpt2+deb12u7) のトリガを処理しています ...

 

 

◯ RDPリモートデスクトップを開いて操作する

 

(接続例)

 $ xfreerdp -g 1300x700 -u UserName 192.168.1.11

Domain:    ← 空欄のままエンター
Password: ← 指定したユーザーに対応するパスワード

 

 ログインに成功するとリモートデスクトップ画面(今回はWindows10のリモートデスクトップ)が開き、操作ができた。

 

 

<参考>

・【Linux CentOS 7.1】Windowsリモートデスクトップに接続する

< http://akira-arets.blogspot.com/2016/11/centos7-connect-windows7-remotedesktop.html > 2024年8月2日

 

2024年8月1日木曜日

【IP電話機 snom】 snom社製IP電話ファームウェアの公式アーカイブリンク

 snom社製IP電話ファームウェアの公式アーカイブリンク


 以下の古い電話機のファームウェアのアーカイブリンク

・https://service.snom.com/display/wiki/Deskphone+-+Filearchive


Snom 300

Snom 320

Snom 360

Snom 370

Snom 710

Snom 712

Snom 715

Snom 720

Snom 725

Snom 760

Snom 820

Snom 821

Snom 870

Snom D375

Snom D765



【IP電話機 snom D375】設定の初期化手順

   ドイツsnom社のIP電話機「snom D375」を使用している。

 以前の設定を入れたままにしていたので、ネットワークに接続する前に設定をリセットしたい。設定が入ったままだと、他のIP電話機との間でSIPアカウントの競合が生じるかもしれない。そこで次の手順で、IP電話機をネットワークに接続する前に設定の初期化を行った。

 

 ◯ IP電話機「snom D375」の設定の初期化手順

・電話機の電源をオフにしておく

・電話機のテンキー「#」を押したまま、電源を 入れる

・しばらく待つと、2つの項目を番号で選択できるメニューが開く

・その内の「Settings reset」 に対応する番号をテンキーで入力

 

 この初期化手順の後、電話機は再起動し、言語選択とロケーション選択のメニューが起動した。 このことから設定が初期化されたと判断できた。

 

<参考>

・How To Reset Your Snom Phone

< https://help.circleloop.com/how-to-snom >  2024年8月1日

2024年7月29日月曜日

【YAMAHA RTX830】ファームウェア更新作業をLinuxマシン(Raspberry Pi 5)から行う手順

 YAMAHA RTX830のファームウェアの更新をLinuxマシンから行った。

 今回ファームウェアを更新したRTX830(Rev.15.02.28)は新品、未設定で、既存のネットワークにはどこにも接続されていないスタンドアローン状態のものである。既に設定済みで運用中のものを更新するものではない。今回適用するファームウェアは「Rev.15.02.30」である。

 言うまでもなく、ファームウェアを更新するだけでは安全には使用することはできない。セキュリティーのために綿密な設定が必要である。

 

■  準備

 Linuxマシンにおいて次の準備を行った。

◯  ファームウェアのダウンロード

 https://www.rtpro.yamaha.co.jp/RT/firmware/index.phpをブラウザで開き、適用するべきファームウェアファイル(拡張子bin)と、チェックサムファイル(拡張子md5)をダウンロードした。


◯ ファームウェアファイルのチェックサムの検証

$ cd Download

$ ls

rtx830.bin
rtx830.md5

$ md5sum -c rtx830.md5

rtx830.bin: 完了


◯ tftp、telnetのインストール

$ sudo su

# apt install tftp 

# apt install telnet

# exit

$


■ RTX830とLinuxマシン(Raspberry Pi 5)を接続

 RTX830は新品で未設定の状態であるが、LAN側でDHCPサーバーの機能が動作している。そのため、Linuxマシンで有線LANについてDHCPクライアントを有効にしている場合、LinuxマシンとRTX830のLAN側をつなぐだけでLinuxマシンは自動的にIPv4アドレスを取得する。

 

◯ Linuxマシンの既存のネットワークの接続状況を確認した

 接続前は次のような状態であった。既存のネットワーク接続「wlan1」が存在している。

$ nmcli d

DEVICE         TYPE      STATE            CONNECTION
wlan1          wifi      接続済み         wlan1      
lo             loopback  接続済み (外部)  lo         
wlan0          wifi      切断済み         --         
p2p-dev-wlan0  wifi-p2p  切断済み         --         
eth0          ethernet  利用不可         --         

 

◯ 万全を期すため、 既存のネットワークからLinuxマシンは切り離した 

 (重要)「万全を期す」というのは、ターゲットのRTX830のつもりが他のネットワークに存在するルーターを相手にしているというような最悪な状態を避けるためである。

$ nmcli con down wlan1

接続 'wlan1' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/2)

)後で再接続するには、「nmcli con up wlan1」とコマンドを入力するか、Linuxマシンを再起動すればよい。 


 次のように、既存ネットワークからは切断されていることが確認できた。

$ nmcli d

DEVICE         TYPE      STATE            CONNECTION
lo             loopback  接続済み (外部)  lo         
wlan0          wifi      切断済み         --         
wlan1          wifi      切断済み         --         
p2p-dev-wlan0  wifi-p2p  切断済み         --         
eth0           ethernet  利用不可         --         

 

◯  LinuxマシンとRTX830とを有線LANで接続し、状態を確認

 Linuxマシンの未使用LANポートと、RTX830のLAN側ポートを有線LANで接続した。その後、数秒程度待ってから状態を確認した。

user01@raspberrypi:~ $ nmcli d

DEVICE         TYPE      STATE            CONNECTION
eth0           ethernet  接続済み         有線接続 1
lo             loopback  接続済み (外部)  lo         
wlan0          wifi      切断済み         --         
wlan1          wifi      切断済み         --         
p2p-dev-wlan0  wifi-p2p  切断済み         --         

 

◯ Linuxマシンが取得したIPv4アドレスを表示 

 Linuxマシンは、RTX830からDHCPで割り当てられたIPv4アドレスを取得している。 

$ ip a

(略)

 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.2/24 brd 192.168.100.255 scope global dynamic noprefixroute eth0
       valid_lft 259194sec preferred_lft 259194sec
    inet6 fe80::XXXX:XXXX:XXXX:XXXX/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

 (略)

 

◯  RTX830側のIPv4アドレスを確認

 Linuxマシンは、RTX830からDHCPで割り当てられたIPv4アドレスといっしょにゲートウェイアドレスを受け取っている。このゲートウェイがRTX830なので、ゲートウェイアドレスがRTX830のLAN側アドレスである。

$ ip r

default via 192.168.100.1 dev eth0 proto dhcp src 192.168.100.2 metric 100

(略)

 ここで、確認したRTX830のLAN側アドレスは後で使う。

 

 

 ■  RTX830のファームウェアを更新

  上記のように、RTX830とLinuxマシンを有線LANで接続したまま次の操作を行った。

 

◯ RTX830でtftpによるアクセスを許可する設定を行った

 LinuxマシンにてtelnetコマンドでRTX830(工場出荷時状態のもの)に接続し、RTX830のコンソールを開いた。(注意)このRTX830は既存のネットワークには接続されていない。

 

$ telnet  192.168.100.1

Trying 192.168.100.1...
Connected to 192.168.100.1.
Escape character is '^]'.

Password:  ←何も入力せずにそのままエンター

RTX830 Rev.15.02.28 (Wed Dec 28 19:47:51 2022)
Copyright (c) 1994-2023 Yamaha Corporation. All Rights Reserved.
To display the software copyright statement, use 'show copyright' command.
YY:YY:YY:YY:YY:YY, YY:YY:YY:YY:YY:yy
Memory 256Mbytes, 2LAN

The login password is factory default setting. Please request an administrator to change the password by the 'login password' command.
> administrator  ←このように入力してエンター
Password:  ←何も入力せずにそのままエンター
The administrator password is factory default setting. Please change the password by the 'administrator password' command.
#
# tftp host any  ←このように入力してエンター
#


 入力した「tftp host any」コマンドは、tftpクライアントからの接続をすべて許可する設定である。後で、必要に応じて解除しておく。

 このままRTX830のtelnetコンソールは開いたままにし、後の手順によるLinuxマシンからのファームウェアの転送の状態がわかるようにしておく。

 Linuxマシンではさらに別のターミナルを用いて次の手順を行った。

 

◯ tftpコマンドでファームウェアをRTX830に送信

$ cd Download

$ ls

rtx830.bin
rtx830.md5

 $ tftp -m binary 192.168.100.1 -c put rtx830.bin exec

Transfer timed out.

 

 このコマンドを実行すると、RTX830とLinuxマシン双方のLANのステータスLEDが点滅してデータ送受信が行われていることがわかった。

 しばらくすると、Linuxマシンで実行したtftpコマンドが「Transfer timed out. 」で終了した。しかし、上記のtelnetコンソールには次のように表示された。

 

Update exec file receiving... Testing received file... Writing to Nonvolatile memory... done
Restarting ...
Connection closed by foreign host.  


  このことから、うまくファームウェアの転送ができたとわかった。RTX830はまもなく再起動しファームウェアの更新作業が完了した。

 

2024年7月28日日曜日

【Raspberry Pi 5】USBタイプWifiドングルによるWiFi接続設定をコマンドで行う手順【Raspberry Pi OS Lite bookworm】

 Raspberry Pi 5をメタルケースに入れたために、電波が遮蔽されてしまうのか内蔵されているWiFi子機によるネット接続が非常に低速だった。

 そこで、USBタイプWifiドングルを外部接続して別途WiFi接続を行おうと考えた。その結果、外部ドングルを用いたWiFi接続の速度は改善され、ブラウジングは高速になった。

 以下では、このときのドングルの接続から、WiFi設定と接続について記述している。設定はすべてコマンドを用いて行った。

 

■ WiFiドングルが認識されるか確認

  今回使用したドングルはUSB2.0接続用300Mbpsタイプのものである。


◯ WiFiドングルを差し込む前の状態

$ nmcli d

DEVICE         TYPE      STATE            CONNECTION    
wlan0          wifi      接続済み         OldConnection
lo             loopback  接続済み (外部)  lo            
p2p-dev-wlan0  wifi-p2p  切断済み         --            
eth0           ethernet  利用不可         -- 

 

◯ WiFiドングルを差し込んだ直後の状態

$ nmcli d

DEVICE         TYPE      STATE            CONNECTION    
wlan0          wifi      接続済み         OldConnection
lo             loopback  接続済み (外部)  lo            
wlan1          wifi      切断済み         --            
p2p-dev-wlan0  wifi-p2p  切断済み         --            
eth0           ethernet  利用不可         --

 

wlan1 」というデバイスが追加された。

 

■ WiFi接続の設定と接続

 ◯ 接続するSSIDを確認

$ nmcli dev wifi list

XX:XX:XX:XX:XX:XX  xxxxxxxxxx          インフラ  2     130 Mbit/s  80      ▂▄▆_  WPA2


◯ 接続を作成

$ sudo su

# nmcli con add con-name wlan1 ifname wlan1 type wifi ssid xxxxxxxxxx

接続 'wlan1' (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) が正常に追加されました。

 

 ssidには、アクセスポイントで公開している接続先を指定した。

 インターフェイス名(ifname)は、最初に「nmcli d」で確認したデバイス名「wlan1」を指定 した。

 接続名(con-name)は任意の名称でよいが、デバイス名と同じように「wlan1」を指定した。 


 ◯ セキュリティーモードを追加

# nmcli con modify wlan1 wifi-sec.key-mgmt wpa-psk

 

◯ SSIDに対応するWiFiパスワードを指定

# nmcli con modify wlan1 wifi-sec.psk WIFIpassword


◯ 接続開始

# nmcli con up wlan1

接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/4)


 エラーが出て接続がうまくいかない場合は、ラズパイを再起動するとうまくいった。


◯ 古いWiFi設定(内蔵WiFi子機を使った接続設定)を削除

  有効な設定が2つあると両方が接続状態になってしまうため、不要なWiFi接続は削除した。

# nmcli con del OldConnection

接続 'cccccccccc' (cccccccc-cccc-cccc-cccc-cccccccccccc) が正常に削除されました。


 同じ内臓WiFiデバイスにおいて複数の接続設定が存在していた場合、上記のように一つだけ接続設定を削除しても、残っている接続設定で自動的にリトライされることになる。そのため、「nmcli d」で確認してみて、「wlan0          wifi      接続中 (設定中)  AnotherOldConnection」のような表記が出ていないかを確認するとよい。もし、あればその接続設定も上記コマンドのようにして削除しておくと良い。


◯ 状態確認

$ nmcli d

DEVICE         TYPE      STATE            CONNECTION
wlan1          wifi      接続済み         wlan1
lo             loopback  接続済み (外部)  lo         
wlan0          wifi      切断済み         --         
p2p-dev-wlan0  wifi-p2p  切断済み         --         
eth0           ethernet  利用不可         --


 最初に接続で使用していた内蔵WiFi子機による接続「wlan0」が「切断済み」となり、代わりに外部USBドングルのWiFi子機による接続「wlan1」が「接続済み」になっている。


(参考)

・【Linux CentOS 7 64bit】WIFI接続の設定方法(コマンドラインで「nmcli」を使用する。)

< http://akira-arets.blogspot.com/2016/11/linux-centos7-setting-wifi-connection.html > 2024年7月28日

 

2024年6月15日土曜日

【Raspberry Pi 5】ブータブルNVMe M.2 SSD搭載時に複製元microSDから起動できない現象の仕組みと対処【Raspberry Pi OS Lite bookworm】

■ 概要

 Raspberry Pi 5は、「NVMe M.2 SSD」と「マイクロSD」とを内蔵でき、設定に応じていずれかからシステムを起動できる。

 ところが、この起動ディスクの切り替えがうまくできない問題にみまわれ、その原因がディスクの内容(識別子)にあるとわかったので、今後の運用に備えて、周辺の事情についても併せて整理しておきたいと思う。


■ 起動ディスクの切り替えができない不具合が生じた環境とディスクの状態について

◯ 公式イメージを書き込んだ「マイクロSD」でシステムをブート

 Raspberry Pi OS Lite(2024-03-15-raspios-bookworm-arm64-lite)の公式イメージを「マイクロSD」にddコマンドで書き込んだものを用意した。

 本体Raspberry Pi 5には、拡張ボード(Geekworm X1001 V1.1 PCIe NVMe M.2 SSD 2280)空の「NVMe M.2 SSD」を取り付けた。
 そこに、さきほど用意したブート可能な「マイクロSD」を挿し込み、システムを起動し、初期設定を済ませ、aptによるシステムの更新作業、ファームウェアの更新を行った。


◯ 「NVMe M.2 SSD」でシステムをブート

 アップデートしたシステムを含む「マイクロSD」(/dev/mmcblk0)の全内容を、空の「NVMe M.2 SSD」(/dev/nvme0n1)にddコマンドで次のように丸ごとコピーした。

dd if=/dev/mmcblk0 of=/dev/nvme0n1 status=progress

 「raspi-config」コマンドのTUI(テキストユーザーインターフェイス)で、「 Advanced Options →Boot Order」から「NVMe M.2 SSD」が起動ディスクとして優先的に選択される設定にした。

 その後、poweroffして「マイクロSD」を取り外してから、起動すると「NVMe M.2 SSD」を起動ディスクとしてシステムがブートした。



◯ 「マイクロSD」で起動するように設定した上でシステムをブート(問題発生)


 共にブート可能な「NVMe M.2 SSD」と「マイクロSD」とが、本体Raspberry Pi 5に接続された状態で、「raspi-config」コマンドのブート設定で「マイクロSD」が優先的に選択されるようにし、rebootした。
 このとき、常に「NVMe M.2 SSD」でブートしてしまう問題にみまわれた。



■ この不具合の原因について

 結論から言うと、これは、ディスク自体に保存されているDisk identifierの値が、これらの「NVMe M.2 SSD」と「マイクロSD」とで同じだからだとわかった。Disk identifierの値が同じである場合、システムが2つのディスクを区別できない状態になり、常に「NVMe M.2 SSD」でブートしてしまうことになったと考えられる。
 実際、「NVMe M.2 SSD」と「マイクロSD」とでDisk identifierの値が異なる場合には、設定の通りに起動ディスクが選択され、意図したディスクから起動するようになった。

 ディスク自体に保存されているDisk identifierの値が同じになってしまったのは、「NVMe M.2 SSD」の内容が、「マイクロSD」の内容からddコマンドで複製したからである。ディスクの中身がddコマンドで丸ごとコピーされたので、ディスク自体に保存されているDisk identifierの値が同じになってしまう。


■ 疑問点と検証

 しかし、次の場合は、うまく「マイクロSD」からシステムが起動した。

 今、本体Raspberry Pi 5には先程と同じ「NVMe M.2 SSD」だけが接続されたままであり、「raspi-config」コマンドのブート設定で「マイクロSD」が優先的に選択されるよう設定した上でシャットダウンしている。

 同じ「マイクロSD」にRaspberry Pi OS Liteのオリジナルイメージデータをもう一度ddコマンドでもう一度書き込んで初期化したものをその本体Raspberry Pi 5に挿し込み起動した。

 すると、「NVMe M.2 SSD」でなく、設定した通りに「マイクロSD」からシステムが起動して、初期設定のためのTUIダイアログに行き着いた。疑問点はここである。

 「マイクロSD」の内容(Disk identifierの値)は、同一のRaspberry Pi OS Liteのオリジナルイメージからddで書き込んでいるので、一回目の書き込みと、二回目の書き込みとで同一であるはずである。そして、一回目の書き込みで作成した「マイクロSD」からddで丸ごとコピーしたので、「NVMe M.2 SSD」の内容(Disk identifierの値)は、二回目の書き込み「マイクロSD」の内容(Disk identifierの値)と同じはずである。
 つまり、全て生まれはRaspberry Pi OS Liteのオリジナルイメージだから、書き込んだディスクのDisk identifierの値が同じになるはずである。しかし、オリジナルイメージでもう一度初期化(二回目の書き込み)を行った「マイクロSD」は「NVMe M.2 SSD」としっかり区別され、設定した通りに「マイクロSD」からシステムが起動したという点である。

 そこで、次の手順で、Raspberry Pi OS Liteのオリジナルイメージで初期化した「マイクロSD」について、本体Raspberry Pi 5に挿し込み起動する前後で、ディスクの識別子(Disk identifier)の変化が生じているのか検証した。



■ 検証のための操作

□ 次の操作は、別のLinuxマシンでの操作である。

◯ ddコマンドでRaspberry Pi OS Liteのイメージデータを「マイクロSDカード(A)」に書き込み

# dd if='2024-03-15-raspios-bookworm-arm64-lite.img' of=/dev/sdb bs=20M status=progress


◯ ddコマンドで「SDカード(A)」を別の「マイクロSDカード(B)」に書き込み

# dd if=/dev/sdb of=/dev/sdg bs=10M status=progress


◯ 書き込み後、fdiskで「マイクロSDカード(A)」の情報を参照

# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p
Disk /dev/sdb: 29.7 GiB, 31914983424 bytes, 62333952 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfb33757d

Device     Boot   Start     End Sectors  Size Id Type
/dev/sdb1          8192 1056767 1048576  512M  c W95 FAT32 (LBA)
/dev/sdb2       1056768 5406719 4349952  2.1G 83 Linux



◯ 同様に、fdiskで「マイクロSDカード(B)」の情報を参照

# fdisk /dev/sdg

Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p
Disk /dev/sdg: 234.1 GiB, 251406581760 bytes, 491028480 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfb33757d

Device     Boot   Start     End Sectors  Size Id Type
/dev/sdg1          8192 1056767 1048576  512M  c W95 FAT32 (LBA)
/dev/sdg2       1056768 5406719 4349952  2.1G 83 Linux


(注意)
gdiskには非対応だった。当OSディスクイメージはGPTでなくMBRを使用しているようである。そのため次の警告が表示されて、gdiskで表示できる「Disk identifier (GUID)」や「Partition unique GUID」がgdiskの起動の度に毎回変化するという挙動となり混乱を招く。

***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************


 以上の結果から、ddコマンドでディスクイメージをコピーしても、「Disk identifier: 0xfb33757d」は変化しないことがわかった。



◯ 各「マイクロSDカード」のファイルシステムを指示する識別子を確認した

 各「マイクロSDカード」について、各パーティションの中のファイルシステムを(一意に)指し示す「UUID」と、パーティションを指示する「PARTUUID」を確認した。


# blkid

/dev/sdb1: LABEL="bootfs" UUID="44FC-6CF2" TYPE="vfat" PARTUUID="fb33757d-01"
/dev/sdb2: LABEL="rootfs" UUID="93c89e92-8f2e-4522-ad32-68faed883d2f" TYPE="ext4" PARTUUID="fb33757d-02"

/dev/sdg1: LABEL="bootfs" UUID="44FC-6CF2" TYPE="vfat" PARTUUID="fb33757d-01"
/dev/sdg2: LABEL="rootfs" UUID="93c89e92-8f2e-4522-ad32-68faed883d2f" TYPE="ext4" PARTUUID="fb33757d-02"


 この結果から、ddコマンドでディスクイメージをコピーしても、パーティション中のファイルシステムを指示する識別子「UUID」は変化しないことがわかった。また、さきほどfdiskコマンドで確認した同一の「Disk identifier: 0xfb33757d」から「PARTUUID」が生成されていることがわかった。
 実際、ググってみても「93c89e92-8f2e-4522-ad32-68faed883d2f」、「44FC-6CF2」、「fb33757d」という文字列でいくつかのページがヒットしたので、他の人も同じ識別子を持つディスクを生成していることがわかった。

 また、これらの情報は、ディスクをマウント/アンマウントした後に確認しても変化しなかった。


◯「マイクロSDカード(B)」から「fstabファイル」の内容を確認した。

proc            /proc           proc    defaults          0       0
PARTUUID=fb33757d-01  /boot/firmware  vfat    defaults          0       2
PARTUUID=fb33757d-02  /               ext4    defaults,noatime  0       1


 ddコマンドによるコピー元である「マイクロSDカード(A)」もこれと同一だと考えられる。



□ いったんRaspberry Pi 5で操作を行う。

1、「マイクロSDカード(A)」を、Raspberry Pi 5に挿し込み、このディスクから起動した。

2、初回設定ウィザードが動作し、キーボードの設定、ユーザー名とパスワードの設定を行った。

3、作成したユーザーでログインした後、すぐにpoweroffコマンドでシャットダウンした。

4、シャットダウンしたことを確認後、「マイクロSDカード(A)」をRaspberry Pi 5から取り外した。



□ 再び、最初のLinuxマシンでの操作を行う。

 「マイクロSDカード(A)」を同じディスクスロットに挿し込んだ後、最初の手順と同様に情報を確認した。

# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p
Disk /dev/sdb: 29.7 GiB, 31914983424 bytes, 62333952 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x17ad7977

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sdb1          8192  1056767  1048576  512M  c W95 FAT32 (LBA)
/dev/sdb2       1056768 62333951 61277184 29.2G 83 Linux


 すると、Raspberry Pi 5で初回起動する前の値「Disk identifier: 0xfb33757d」と、今回の値「Disk identifier: 0x17ad7977」は異なっていることがわかった。



# blkid

/dev/sdb1: LABEL="bootfs" UUID="44FC-6CF2" TYPE="vfat" PARTUUID="17ad7977-01"
/dev/sdb2: LABEL="rootfs" UUID="93c89e92-8f2e-4522-ad32-68faed883d2f" TYPE="ext4" PARTUUID="17ad7977-02"

/dev/sdg1: LABEL="bootfs" UUID="44FC-6CF2" TYPE="vfat" PARTUUID="fb33757d-01"
/dev/sdg2: LABEL="rootfs" UUID="93c89e92-8f2e-4522-ad32-68faed883d2f" TYPE="ext4" PARTUUID="fb33757d-02"


 Raspberry Pi 5で初回起動する前後で、ディスクのパーティションを識別する「PARTUUID」の値が変化していることがわかった。


 さらに、この変化に併せて、「fstabファイル」の内容も調整されていることがわかった。

proc            /proc           proc    defaults          0       0
PARTUUID=17ad7977-01  /boot/firmware  vfat    defaults          0       2
PARTUUID=17ad7977-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that



■ 結論

 以上のことから、Raspberry Pi OS Liteのオリジナルディスクイメージで初期化した「マイクロSD」は、本体Raspberry Pi 5に挿し込み初回起動することによって、オリジナルディスクイメージとは異なるディスクの識別子(Disk identifier)を持つようになる。

 またこれによって、ディスクのパーティションを識別する「PARTUUID」の値も変化し、さらにはそれに併せて「fstabファイル」の内容も書き換えられることがわかった。



■ まとめ

 今回の環境と条件のような場合では、「NVMe M.2 SSD」は、ddによるコピー元の「マイクロSD」と同一のディスクの識別子(Disk identifier)を持ったままである。ddコピーしただけではディスク識別子の書き換えは起こらない。

 ディスクの識別子(Disk identifier)が同一の「NVMe M.2 SSD」と「マイクロSD」とでは、起動ディスクの選択をしても区別ができずに、常に「NVMe M.2 SSD」でブートしてしまう。

 Raspberry Pi OS Liteのオリジナルディスクイメージで初期化した「マイクロSD」は、本体Raspberry Pi 5に挿し込み初回起動することによって、オリジナルディスクイメージとは異なるディスクの識別子(Disk identifier)を持つようになるため、先のような状況においても、「NVMe M.2 SSD」でなく、設定した通りに「マイクロSD」からシステムが起動させられる。

 「NVMe M.2 SSD」に対するコピー元の「マイクロSD」において、ディスクの識別子(Disk identifier)と、fstabの内容を変更すれば、先のような状況においても、「NVMe M.2 SSD」でなく、設定した通りに「マイクロSD」からシステムが起動させられるのはないかと思う。



(参考)
・Can't boot from SD card anymore?
< https://forums.raspberrypi.com/viewtopic.php?t=372103 > 2024年6月15日

投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad