通算2台のOrange Pi Zero 3ボードの内、最初に買ったOrange Pi Zero 3 RAM4GBに入れるOSを探す旅の中、Kali Linuxを入れてみた話。
デスクトップ版はイメージが2つに分かれイレギュラーに付き、何も考えずminimal版...にしてみたら、ホントに最小限。
当初、壊れたラズパイの代わりにOrange Pi Zero 3 RAM4GBボードとしたスマートスピーカーを新たに買ったOrange Pi Zero 3 RAM2GBと差し替え、4GBは、自作中のテレビドアホン親機に、子機用にもう1台調達しようかと。
Orange Pi公式OSの1つDebian Bookwormサーバ版、一度はデスクトップを入れ、スピーカー出力は確認済みもタッチパネルを試すタイミングを逃したまま、2度めにデスクトップインストールにおいて謎の失敗。
サードパーティ製をと、xfce版をddしても起動に至らず、共にCLIながら、evtestでタッチパネルのタッチに反応した気づけばベンダー(Orange Pi)バージョンとコミュニティバージョンがあったArmbianは、それぞれ若干様子は違いつつも、また、タッチパネルを、あっさり使えた標準デスクトップがLXDI-piなraspberry-pi-osも、素直にスピーカー出力できずで続いて昔、少しだけ使ったことのあったKali Linuxにしてみた次第。
Orange Pi Zero 3用のサードパーティなKali LinuxもOrange Pi公式Debian同様、全RAMサイズ共通のイメージを焼くのとは別にRAM1.5GBと4GBは追加作業が必要でした。
4GB版には、リンクが2つありますが、飛ぶページは同一で左ペインからファイルを選ぶことができ、[view]をクリックで中身を表示、ダウンロードアイコンでダウンロードできるようになっており、個別にダウンロード・展開することもできますが、自身は、トップから全部ダウンロードしました。
自身も中国語はさっぱりですが、コマンドもリンク内容もアルファベットだけでやるべきことは十分伝わり、要は、それらファイルを追加作業リンクにある通り、dtbファイルをcpで上書き及びimgファイルをmicroSDなどデバイス先頭にddすればOK。
このOrange Pi Zero 3用Kaliのminimal版、他の公式やサードパーティと違い、orangepi_first_run.txtはなく、無線関係も起動後インストールが必要なほどミニマルなので2.4GHzアダプタによる無線マウスやキーボードも使えず、LANケーブルをつながないとIPも配布されませんでした。
結果、LANケーブルを接続、他デバイスからnmapなどで新たに出現するIPアドレスを見つけ、ssh接続を試みたところ、それが前提なのでしょう、これはできました。
デフォルトユーザーとパスワードは、共に[kali]。
併せてorangepiEnv.txt的なものもなさ気かつ、OSイメージは、パーティションが1つでmicroSDからUSBへのチェーンブートは、できたとして他と違って手間はかかるようなので、とりあえず、microSDカードのみ。
rootは何も考えず、sudo passwd rootで早速、rootパスワードを設定。
kaliユーザーも変更したいので[useradd -m 新規ユーザー]としてホームディレクトリを作成しつつ、ユーザー追加、/etc/groupと/etc/passwdを順に編集、新規ユーザー行を削除すると共に[kali]を[新規ユーザ名]と置換。
kaliユーザーが1000な中、追加した新規ユーザーのグループID、ユーザーIDが1001となっているはずなので[chown -R 新規ユーザー(グループ):新規ユーザー /home/新規ユーザー]として所有者設定。
このように早い段階でこれらを実施していれば、問題ないはずも念の為、迷子な子たちがいないか[sudo find / -nogroup -uid 1001]、[sudo find / -nouser -uid 1001]として確認、あれば対処(/procとか、/tmp内にあるものは無視しても問題ないはず)。
前掲の画像のように初めてのログインの際には、端末上に「これは最小限バージョンで何かしたかったらリンクを見てね」、「このメッセージを表示しないようにするには、~/.hushloginしてね」といった旨、表示されました。
そのリンクが、Minimum Install Setup Information。
更にそのページのMetapackagesリンクをクリックして表示されるKali Linux Metapackagesに沿ってsudo apt update、sudo apt -y full-upgrade、標準デスクトップが何なのか気にはなったものの、自身は、sudo apt install kali-linux-defaultしてみました。
upgredeではなく、full-upgradeなのは、Kaliの標準が日々更新され続けるローリングリリース版だからでしょう。
ついでにja_JP.UTF-8を各方面に設定すべく、locales-allパッケージもインストール、~/.profileに設定。
それと日本語表示用にfonts-ipafont-mincho fonts-ipafont-gothicなどのフォントパッケージもインストール。
また、例えば、sudo dpkg-reconfigure tzdataにより対話式でタイムゾーンを設定。
この時点で既に/etc/wpa_supplicantとかあるので要らないのか、要るのか...、迷いつつ、kali-tools-802-11をインストール...。
っていうか、Kaliの場合、初回起動時設定できない代わりに有線/無線の併用や有線無効、無線有効といったこともできそうです。
NetworkManagerがデフォルトのようでnmcli、nmtuiがあります。
あ、やっぱり、そうでした、自身のWi-FiドングルWLI-UC-GNM2の場合、確かralinkなのでapt-cache search ralinkしたところfirmware-misc-nonfreeパッケージである模様。
これをインストールしてからnmtuiからアクティベートに行くとUSB WiFiが表示されるようになり、適宜SSIDを選択、アクティベート、詳細未設定なら、有線LANをディアクティベートせずに一画面戻って[接続の編集]からSSID/PASSPHRASEを設定したり、DHCP自動配布を固定IPにするなりしたあと、有線が不要なら、また、アクティベート画面に戻ってディアクティベート。
この時、ssh接続していたのであれば、有線LANに割り当てられたIPだったはずでフリーズするでしょうから、改めてssh接続。
また、たまたま、firmware-misc-nonfreeにTelinkのUSB2.4GHz無線レシーバー用ドライバも入っていたようでマウス、キーボードも使えるようになりました。
ホスト名の変更もnmtuiでと思ったら、polkitうんちゃらでエラー、本来の方法でと/etc/hostsと/etc/hostnameを変更、再ログインしてみても反映されない...、ならばと加えてnmtuiでもホスト名を変更してみたところ、なんとエラーになることなく、再ログイン後、変更が反映されました。
連携できていないのはバグでしょうね、かえって手間増えてますし。
あと、IPアドレスのみならず、*.localでもssh接続できるようavahi-utilsをインストール。
そう言えば、標準デスクトップかとstartxしてみるとxinitパッケージがないとおっしゃる...一体、デスクトップは何なのか?ウィンドウマネージャ?
でも、ウィンドウマネージャだとしてもxorgやwaylandは入り、前者が入れば、結果、xinitはあるはずだよね?
そこで、よく読み直してみるとkali-linux-defaultには、標準デスクトップとは書いておらず、「(何を指すのか微妙に不明ながら)これらのパッケージを含む"デフォルト"のデスクトップイメージたち」と書いてあるというか、それしか書いてない...imagesって?sがつくのはなぜ?何れにせよ、デスクトップ環境なの?そうじゃないの?
そうじゃない場合に備え?Cinnamonはなさ気なのでMATE(kali-desktop-mate)をインストール。
再起動してみるとログインマネージャlighdmが開き、
ログインするとMATEが起動。
MATEでも、あっさり、タッチスクリーンのタッチ操作もできました。
それもそのはず、メニューから辿って[ディスプレイ/Display]を見ると、ちゃんとHDMI接続した7.1インチのIPSタッチスクリーンTFT液晶が認識されていました。
ちなみにこのモニタ、ラズパイを背負う前提のものではなく、そういう意味では汎用。
デスクトップ環境MATE起動後もスピーカー出力には至らず。
そこでサウンドサーバとして今どきはpipewireでしょうが、なんとなく、pulseaudio、音量調節にpavucontrol、aplay/arecordを使うべく、alsa-utilsをインストール。
それでもスピーカー出力はできず。
そう言えば、昔、Windowsと併用、時を経ずしてWindowsを卒業するにあたり、いろんなLinuxディストロを試した際、oss、alsa、これらを包含するpulseaudioの他、gstreamer系も入れていたのを思い出し、gstreamer1.0-pulseaudio、gstreamer1.0-plugins-good、gstreamer1.0-plugins-bad、gstreamer1.0-plugins-uglyをインストールしてみるも関係なかったようで未だスピーカーで出力するまでには至らず。
他方、alsa-utilsはインストール済み、dpkg -l *alsa*結果からもスピーカー出力できているOrange Pi Zero RAM2GBでも少なくともalsaと名のつくパッケージはこれだけで不足はなさ気...。
同様にdpkg -l *pulse*してみるとlibpulse-devパッケージがなさ気だったのでインストールしてみると結構な数のパッケージが併せてインストールされたものの、スピーカー出力には至らず...。
スピーカー出力でこんなに手間取るとは...意外な展開。
これだけいくつもOS試して、どれもこれもとなるとカーネル云々じゃなさ気。
尚、raspberry-pi-osもそうでしたが、KaliのMATEでも端末からwavファイルをaplayしてみると[ALSA plug-in [aplay]:ALSA Playback]としてPulseAudio音量調節の出力に再生される様子は表示されるのでALSAか、ハードまで届いていない感じ。
とは言え、接続しているスピーカーは、ノートPCにつなげば、ちゃんと音は出る...となるとOrange Pi Zero 3拡張ボード上のUSBポートに挿してあるものの、もう1つのポートに挿したモニタは動作しているので3.5mmオーディオジャックの不具合か...?
そこでスマートスピーカー用としているRAM2GBの方の拡張ボードと替えてみても変わらず...尤も公式OSの方では、替える前の拡張ボードで音が出ていたので、その後、壊したとかでもない限り、当然の結果。
もちろん、拡張ボードを交換したスマートスピーカーも正常に機能し音も出ています。
気になるのは、alsamixerでどれを選んでもHeadphoneやSpekerの文字が一切ないこととaplay *.wavと直か、-Dオプションをつけた場合もdefault以外、aplay -lLで出てくるデバイスはことごとくbusyになってしまうこと。
-D defaultか指定なしの場合、PulseAudioに渡されているだけで、そこからALSAに渡されたか否か含め、割り振りがどうなっているのかわからないということか...。
となるとPulseAudioとALSAの連携が上手くいっていないか、出力デバイス(スピーカー)に上手く紐付けができていない?
ならばと試しにPulseAudioじゃなく、PipeWireにしてみることに。
再起動直後こそ、音はでず、alsamixerにデバイスがないと言われたものの、なんとなく、[systemctl --user --now stop wireplumber.service]後、[systemctl --user --now start wireplumber.service]してみるとalsamixerにデバイスとしてPipeWireが出てきてMaster/Captureのみながら音量調節できる状態に。
再生してみるとスピーカーから音が出た!
ただ、音が出たには出たのですが、何やらノイズがすごい...というか、「ザーッ」というノイズしかない...、rateを変えても変わらず...とは言え、スピーカーから音が出ただけ、大きく前進ではありますが...。
っていうか、何らかのキー割り当てがあるのか、下矢印キーを押すとスピーカーから「ザーッ」と音がする...なにこれ。
うーん、Armbian同様、Audio実装がOS的に不完全なのか...?とは言え、Orange Pi公式OSの1つDebian BookwormではRAM4GBボードでもスピーカー出力できたわけで...これを入れているOrange Pi Zero 3 RAM2GBの方は、スマートスピーカーに使えているわけで、これとの違いはどこにあるのか...?
何れにせよ、ハードに問題がないわけだから、ソフトウェアで対処できるということではないのか?
と言っても複数のOSでとなると...OSSの猛者たちが、ここをクリアできていないということか...だとすれば、Orange Pi Zero 3のスピーカー出力は一筋縄ではいかず、諦めるしかないのか...?
一方、スピーカー出力を確認できたOrange Pi公式OSの1つDebian Bookwormについては、一度はできたデスクトップインストールが2度めに失敗し、デスクトップ上のタッチ操作は未確認、orange-pi-osのLXDE-piでもkali linuxのMATEでも、あっさりタッチ操作できたわけで、これに再チャレンジするのが近道か...。
ああああああああ!鳴った、音出た!全く雑音・ノイズなく、「ふろんっと せんたーっ!」
音が出るOrange Pi Zero 3も出ない方もaplay -lの出力結果は同一。
でも、英語でも日本語でも検索にかからない...、僅かにヒットするものは、該当しない...。
そんな中、ならばとaplay -lのカード0/デバイス0の["audiocodec" "CDC PCM Codec-0"]をキーに検索してみたところ、VoIP Linphone install on Orange Pi PCを発見。
そのページの「ALSAマルチ音声出力対応」のとこに「3.5mmオーディオジャック出力はデバイス名がaudiocodec, card 0, device 0 となります。」、「この場合、以下のasound.confにはhw:0,0と指定します。」と。
PulseAudioでは確認していたのにPipeWireに替えてからaplayに-Dオプション付きでhw:やplughw:は、確認してなかったなと試してみたら音が鳴った次第。
ということは、ザーッと鳴ってた時は、どのカードのどのデバイスに接続されてたんだ?2:0の[ahubhdmi]?いやhdmiって...。
っていうか、[audiocodec CDC PCM Codec-0]は、aplay -lでは、[card 0/device 0]ですし、cat /proc/asound/pcmでも[00-00]ですし、/usr/share/alsa/alsa.confでも[defaults.ctl.card 0]/[defaults.pcm.card 0]/[defaults.ctl.device 0]ですし、cat /etc/proc/cardsの順でもaudiocodecが1。
音が鳴るOrange Pi Zero 3ボードも鳴らない方も、これらは同様なのに、なぜ、今回、鳴らない方の[hw:0,0]がdefaultになっておらず、無指定だと違うデバイスを指しているかのごとく、雑音になってしまうのか、謎が残りますが...。
PulseAudioの時は、もう1つ[ahubdam]という選択肢もあって、どれもダメでザーッという雑音さえなかったのですが...hwとplughwを一通り試さなかったからか、そもそもPulseAudioでは音すら出なかったわけでダメだったのか...。
となるとArmbianもraspberry-pi-osも、ここまで追求しませんでしたが、PipeWireにすれば音出てたのかもしれませんね、あ、オーディオが不完全とあったコミュニティ版はそうでもないのかな?
と言ってもaplay *.wavやaplay -D default *.wavで再生できないとブラウザとかGUIで音がでないことに...。
aplay -D plughw:0,0 *.wavやaplay -D hw:0,0 *.wavでも音が出るんですが、この0:0は、card 0とdevice 0を指す...。
よって前掲のaplay -lやaplay -lLの出力にある当該デバイスをpactl set-default-sinkすれば良いはず。
というわけでpactl list sinksしてみるとこんな感じ
つまり、48の[alsa_output.platform-5096000.codec.stereo-fallback]が、aplay -lのcard 0/device 0であり、[audiocodec]と一致するので、これにすれば良いはずなのに起動時に有効になるようスタートアッププログラムに登録しても期待した通りにならない...。
USB Audioとして認識されるUSBマイクの方は、pactl set-default-sourceでいけてるんですけどね...。
PipeWireが割り当ててくれてるはずの方は...。
結果、Default Sink/Sourceは、pactl infoやpactl get-default-sink/get-default-sourceで確認するとこんな感じになっており、合っている。
aplay -D sysdefault *.wavでも音は出たものの、defaultとは別物...。
aplay -D default、もしくは、-Dオプションなしが、card 0/device 0のデバイスと一致しないのはおかしい(よね?)
バグなのかな?と思うのは、同じ[sysdefault]でも、aplay -Lの出力では、[sysdefault:CARD=ahubhdmi]となっていますが、この環境では、card 2/device 0であるahubhdmiを指定したaplay -D sysdefault:CARD=ahubhdmi *.wavでは当然?出力できず、card 0/device 0であるaudiocodecを指定したaplay -D sysdefault:CARD=audiocodec *.wavで音が出力されること。
だとすると[sysdefault:CARD=audiocodec]となっているか、むしろ、この環境においては、[sysdefault:CARD=ahubhdmi]で合っていてCARD指定なしsysdefaultで再生・音源出力できるべきではないのでは?それと合わせて-D defaultや-Dオプションなしで音源出力できるべきなのでは?と...。
これってユーザー側で解決できることなのだろうか...、ん?もしや、Why are my speaker not mapped correctly for my 5.1 surround setup?にあるようにALSAのAPIが間違った情報を送ってきた場合、PipeWireやPulseAudioも芋づる式に...なんて深みにハマってる?
ただ、ノートパソコンのDebian BookwormやRaspberry Pi 400/Raspberry Pi OS Bookwormでも前はpulseaudio、今はpipewireで何の問題もないから、違うか...。
あ、もしかして...と思ってUSBサウンドアダプタを噛ましてpactl list short sinksでこれに相当する値をpactl set-default-sinkに渡したら、aplayの-Dオプションなし、もしくは、-D defaultでスピーカーから音が出ました。
併せてPipeWire版PulseAudio音量調節パネルも自動的にUSBサウンドアダプタがデフォルトになっていたからですが。
というわけでスタートアップに設定してあった値も変更。
結果、当然、VLCでもブラウザでもYouTubeなどで再生するとスピーカーから音声出力されるようになりました。
このサウンドアダプタ、aplayでいくらやっても再生できないので、ラズパイ400で試すとあっさり再生され音も出る...。
なんで?ドライバか?とfirmwareを見比べて1つずつ確認したのですが、再起動が必要だったか...と差分全部インストールしてから気づき、firmware-linux/firmware-realtek/firmware-atheros/firmware-libertasを入れて再起動したところ、音が出た次第。
1000円前後だった気がするPlugable USB Audio Adapterはラズパイ400で使ってますが、後に買って今回使ったUSBサウンドアダプタは、5年半前とは言え、1ドル3セントと激安で買って在庫として眠っていたもの、全然使えるじゃん...キャンドゥ500円スピーカーも今まで以上に良い音質に聴こえる気がする...という副産物もあって尚、めでたし、めでたし。
まさか、そんなサウンドアダプタが日の目を見る日が来るとは...、更に確か8年越しとなるKali Linuxに落ち着くとは。
いや、でも良かった................解決。
ぬーーーーーーーーーーーー...。
USBサウンドアダプタを介してもsink(スピーカー)をsource(マイク)と誤認識したり、Pro Audioの選択肢があっても同様に誤認識しており、スピーカーを認識しなくなった...。
唯一、apt purge -y pipewire pipewire-pulse後、reboot、(前者の場合、PulseAudioでも同症状となり、)、再度、apt install -y pipewire pipewire-pulse、rebootすると初回のみsink(スピーカー)をsink&sourceとして認識する...。
唯一とは言うものの、apt purgeではなく、apt install -y --reinstall pipewire pipewire-pulse後、rebootでも初回のみ正常に認識することもある......。
が、これらすら必ず上手く行くとは限らず...、上手くいったとしても改めて再起動すると誤認識...と魔のループ...。
また、OSの旅、再開か...。
というわけでオーディオ、タッチ操作共に安定しているOrange Pi OS Bookwormに移行。
Orange Pi Zero 3初購入がRAM4GBボード、当初はサーバ版からデスクトップをインストールする恰好だったものの、真っ先に試した公式OSの1つBookworm版ですが、用途を決めかねて、タッチパネルも購入する以前ゆえ、オーディオ確認はしていたものの、タッチ操作は未確認ながら、OSの旅中にタッチ操作はできそうだということもあり、こうなることは想定内ではありましたが。
というか、お熱くなりがちなWi-FiドングルWLI-UC-GNM2、USBハブの不具合も相まってか、単独でUSBポートに挿さないとドングルだけでなく、例えば、2.4GHz無線レシーバーと一緒にハブにつなぐとOS起動時、認識せず、GNM2を挿し直すと共に機能するという状況に何度か遭遇。
スマートスピーカーに使っている方は、USBマイクやUSBスピーカーともう1つある同一のWLI-UC-GNM2一緒に同一品と思われるUSBハブに挿して運用してるんですけどね。
って挿し直せばいけるとは言え、接続時に2.4GHzの電波が干渉する結果そうなるのかも?それですね、きっと。
USB延長ケーブルとかかましときますかね。
ドアホン親機パネルとして稼働し始めたら、映像+大きめのボタンで操作するだけにするから、USBレシーバーの方は要らず、使うとしても一時的なので。