気の向くままに辿るIT/ICT/IoT
ハードウェア

Orange Pi Zero 3にKali Linux

ホーム前へ次へ
Orange Piって?

Orange Pi Zero 3にKali Linux

Orange Pi Zero 3にKali Linux

2024/05/14

 通算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用サードパーティ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 Linux minimalの初回起動と環境整備

Orange Pi Zero 3/Kali Linux minimalの初回起動とログイン

 この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カードのみ。

kali@opizero3 $ sudo passwd root
kali@opizero3 $ ...
kali@opizero3 $ sudo useradd -m NEW_USER
kali@opizero3 $ sudo cp /etc/group /etc/group.bak
kali@opizero3 $ sudo cp /etc/passwd /etc/passwd.bak
kali@opizero3 $ sudo vi /etc/group
kali@opizero3 $ sudo vi /etc/passwd
kali@opizero3 $ sudo chown -R 新規ユーザー(グループ):新規ユーザー /home/新規ユーザー
kali@opizero3 $ sudo find / -nogroup -uid 1001
kali@opizero3 $ ...
kali@opizero3 $ sudo find / -nouser -uid 1001
kali@opizero3 $ ...
kali@opizero3 $

 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

kali@opizero3 $ sudo apt update && sudo apt -y full-upgrade
kali@opizero3 $ ...
kali@opizero3 $ sudo apt install kali-linux-default
kali@opizero3 $ ...
kali@opizero3 $ sudo apt install -y locales-all fonts-ipafont-mincho fonts-ipafont-gothic
kali@opizero3 $ ...
kali@opizero3 $ vi ~/.profile
...
export LANG=ja.JP_UTF-8
export LANGUAGE=ja.JP_UTF-8
export LC_ALL=ja.JP_UTF-8
...
kali@opizero3 $ sudo dpkg-reconfigure tzdata
...
kali@opizero3 $ sudo apt install kali-tools-802-11
kali@opizero3 $ ...
kali@opizero3 $

 更にそのページの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があります。

kali@opizero3 $ sudo apt install firmware-misc-nonfree
kali@opizero3 $ ...
kali@opizero3 $ sudo nmtui
kali@opizero3 $ ...
kali@opizero3 $ sudo apt install avahi-utils
kali@opizero3 $

 あ、やっぱり、そうでした、自身の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をインストール。

Kali Linuxでタッチパネル操作

 そう言えば、標準デスクトップかとstartxしてみるとxinitパッケージがないとおっしゃる...一体、デスクトップは何なのか?ウィンドウマネージャ?

 でも、ウィンドウマネージャだとしてもxorgやwaylandは入り、前者が入れば、結果、xinitはあるはずだよね?

 そこで、よく読み直してみるとkali-linux-defaultには、標準デスクトップとは書いておらず、「(何を指すのか微妙に不明ながら)これらのパッケージを含む"デフォルト"のデスクトップイメージたち」と書いてあるというか、それしか書いてない...imagesって?sがつくのはなぜ?何れにせよ、デスクトップ環境なの?そうじゃないの?

kali@opizero3 $ sudo apt install kali-desktop-mate
kali@opizero3 $ ...
kali@opizero3 $

 そうじゃない場合に備え?Cinnamonはなさ気なのでMATE(kali-desktop-mate)をインストール。

Orange Pi Zero 3/Kali Linux/ログインマネージャlightdm

 再起動してみるとログインマネージャlighdmが開き、

Orange Pi Zero 3/Kali Linux/デスクトップMATE

 ログインするとMATEが起動。

 MATEでも、あっさり、タッチスクリーンのタッチ操作もできました。

 それもそのはず、メニューから辿って[ディスプレイ/Display]を見ると、ちゃんとHDMI接続した7.1インチのIPSタッチスクリーンTFT液晶が認識されていました。

 ちなみにこのモニタ、ラズパイを背負う前提のものではなく、そういう意味では汎用。

Kali Linuxでスピーカー出力

 デスクトップ環境MATE起動後もスピーカー出力には至らず。

kali@opizero3 $ sudo apt install pulseaudio pavucontrol alsa-utils
kali@opizero3 $ ...
kali@opizero3 $

 そこでサウンドサーバとして今どきはpipewireでしょうが、なんとなく、pulseaudio、音量調節にpavucontrol、aplay/arecordを使うべく、alsa-utilsをインストール。

 それでもスピーカー出力はできず。

kali@opizero3 $ sudo apt install gstreamer1.0-pulseaudio gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
kali@opizero3 $ ...
kali@opizero3 $

 そう言えば、昔、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と名のつくパッケージはこれだけで不足はなさ気...。

kali@opizero3 $ sudo apt install libpulse-dev
kali@opizero3 $ ...
kali@opizero3 $

 同様に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の連携が上手くいっていないか、出力デバイス(スピーカー)に上手く紐付けができていない?

kali@opizero3 $ sudo apt install sudo apt install \
         pipewire-audio \
         pipewire-pulse \
         pipewire-alsa \
         libspa-0.2-bluetooth \
         wireplumber \
         pipewire-media-session-
kali@opizero3 $ ...
kali@opizero3 $ systemctl --user --now start wireplumber.service
kali@opizero3 $ ...
kali@opizero3 $

 ならばと試しに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でも、あっさりタッチ操作できたわけで、これに再チャレンジするのが近道か...。

kali@opizero3 $ aplay -D hw:0,0 /usr/share/sounds/alsa/Front_Center.wav
kali@opizero3 $ ...
kali@opizero3 $

 ああああああああ!鳴った、音出た!全く雑音・ノイズなく、「ふろんっと せんたーっ!」

kali@opizero3 $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: audiocodec [audiocodec], device 0: CDC PCM Codec-0 [CDC PCM Codec-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: ahubhdmi [ahubhdmi], device 0: ahub_plat-i2s-hifi i2s-hifi-0 [ahub_plat-i2s-hifi i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
kali@opizero3 $ aplay -D hw:0,0 /usr/share/sounds/alsa/Front_Center.wav
kali@opizero3 $ ...
kali@opizero3 $

 音が出る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にすれば音出てたのかもしれませんね、あ、オーディオが不完全とあったコミュニティ版はそうでもないのかな?

2024/05/15

 と言ってもaplay *.wavやaplay -D default *.wavで再生できないとブラウザとかGUIで音がでないことに...。

kali@opizero3 $ aplay -lL
**** List of PLAYBACK Hardware Devices ****
null
  Discard all samples (playback) or generate zero samples (capture)
lavrate
  Rate Converter Plugin Using Libav/FFmpeg Library
samplerate
  Rate Converter Plugin Using Samplerate Library
speexrate
  Rate Converter Plugin Using Speex Resampler
jack
  JACK Audio Connection Kit
oss
  Open Sound System
pipewire
  PipeWire Sound Server
pulse
  PulseAudio Sound Server
speex
  Plugin using Speex DSP (resample, agc, denoise, echo, dereverb)
upmix
  Plugin for channel upmix (4,6,8)
vdownmix
  Plugin for channel downmix (stereo) with a simple spacialization
default
  Default ALSA Output (currently PipeWire Media Server)
hw:CARD=audiocodec,DEV=0
  audiocodec, CDC PCM Codec-0
  Direct hardware device without any conversions
plughw:CARD=audiocodec,DEV=0
  audiocodec, CDC PCM Codec-0
  Hardware device with all software conversions
sysdefault:CARD=audiocodec
  audiocodec, CDC PCM Codec-0
  Default Audio Device
dmix:CARD=audiocodec,DEV=0
  audiocodec, CDC PCM Codec-0
  Direct sample mixing device
usbstream:CARD=audiocodec
  audiocodec
  USB Stream Output
usbstream:CARD=ahubdam
  ahubdam
  USB Stream Output
hw:CARD=ahubhdmi,DEV=0
  ahubhdmi, ahub_plat-i2s-hifi i2s-hifi-0
  Direct hardware device without any conversions
plughw:CARD=ahubhdmi,DEV=0
  ahubhdmi, ahub_plat-i2s-hifi i2s-hifi-0
  Hardware device with all software conversions
sysdefault:CARD=ahubhdmi
  ahubhdmi, ahub_plat-i2s-hifi i2s-hifi-0
  Default Audio Device
dmix:CARD=ahubhdmi,DEV=0
  ahubhdmi, ahub_plat-i2s-hifi i2s-hifi-0
  Direct sample mixing device
usbstream:CARD=ahubhdmi
  ahubhdmi
  USB Stream Output
usbstream:CARD=Device
  USB PnP Sound Device
  USB Stream Output
**** List of PLAYBACK Hardware Devices ****
card 0: audiocodec [audiocodec], device 0: CDC PCM Codec-0 [CDC PCM Codec-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: ahubhdmi [ahubhdmi], device 0: ahub_plat-i2s-hifi i2s-hifi-0 [ahub_plat-i2s-hifi i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
kali@opizero3 $

 aplay -D plughw:0,0 *.wavやaplay -D hw:0,0 *.wavでも音が出るんですが、この0:0は、card 0とdevice 0を指す...。

kali@opizero3 $ pactl list sinks
pactl list sinks
Sink #48
 State: SUSPENDED
 Name: alsa_output.platform-5096000.codec.stereo-fallback
 Description: Built-in Audio Stereo
 Driver: PipeWire
 Sample Specification: s24-32le 2ch 48000Hz
 Channel Map: front-left,front-right
 Owner Module: 4294967295
 Mute: no
 Volume: front-left: 56352 / 86% / -3.93 dB, front-right: 56352 / 86% / -3.93 dB
    balance 0.00
 Base Volume: 65536 / 100% / 0.00 dB
 Monitor Source: alsa_output.platform-5096000.codec.stereo-fallback.monitor
 Latency: 0 usec, configured 0 usec
 Flags: HARDWARE DECIBEL_VOLUME LATENCY
 Properties:
  alsa.card = "0"
  alsa.card_name = "audiocodec"
  alsa.class = "generic"
  alsa.device = "0"
  alsa.id = "CDC PCM Codec-0"
  alsa.long_card_name = "audiocodec"
  alsa.name = "CDC PCM Codec-0"
  alsa.resolution_bits = "16"
  alsa.subclass = "generic-mix"
  alsa.subdevice = "0"
  alsa.subdevice_name = "subdevice #0"
  api.alsa.card.longname = "audiocodec"
  api.alsa.card.name = "audiocodec"
  api.alsa.path = "hw:0"
  api.alsa.pcm.card = "0"
  api.alsa.pcm.stream = "playback"
  audio.channels = "2"
  audio.position = "FL,FR"
  card.profile.device = "1"
  device.api = "alsa"
  device.class = "sound"
  device.id = "41"
  device.profile.description = "Stereo"
  device.profile.name = "stereo-fallback"
  device.routes = "1"
  factory.name = "api.alsa.pcm.sink"
  media.class = "Audio/Sink"
  device.description = "Built-in Audio"
  node.name = "alsa_output.platform-5096000.codec.stereo-fallback"
  node.nick = "CDC PCM Codec-0"
  node.pause-on-idle = "false"
  object.path = "alsa:pcm:0:hw:0:playback"
  priority.driver = "1000"
  priority.session = "1000"
  factory.id = "18"
  clock.quantum-limit = "8192"
  client.id = "35"
  node.driver = "true"
  factory.mode = "merge"
  audio.adapt.follower = ""
  library.name = "audioconvert/libspa-audioconvert"
  object.id = "48"
  object.serial = "48"
  api.acp.auto-port = "false"
  api.acp.auto-profile = "false"
  api.alsa.card = "0"
  api.alsa.use-acp = "true"
  api.dbus.ReserveDevice1 = "Audio0"
  device.bus_path = "platform-5096000.codec"
  device.enum.api = "udev"
  device.form_factor = "internal"
  device.icon_name = "audio-card-analog"
  device.name = "alsa_card.platform-5096000.codec"
  device.nick = "audiocodec"
  device.plugged.usec = "2512690"
  device.subsystem = "sound"
  sysfs.path = "/devices/platform/soc/5096000.codec/sound/card0"
  device.string = "0"
 Ports:
  analog-output: Analog Output (type: Analog, priority: 9900, availability unknown)
 Active Port: analog-output
 Formats:
  pcm
Sink #50
 State: SUSPENDED
 Name: alsa_output.platform-soc_ahub1_mach.pro-output-0
 Description: Built-in Audio Pro
 Driver: PipeWire
 Sample Specification: s32le 2ch 48000Hz
 Channel Map: aux0,aux1
 Owner Module: 4294967295
 Mute: no
 Volume: aux0: 65536 / 100% / 0.00 dB, aux1: 65536 / 100% / 0.00 dB
    balance 0.00
 Base Volume: 65536 / 100% / 0.00 dB
 Monitor Source: alsa_output.platform-soc_ahub1_mach.pro-output-0.monitor
 Latency: 0 usec, configured 0 usec
 Flags: HARDWARE DECIBEL_VOLUME LATENCY
 Properties:
  alsa.card = "2"
  alsa.card_name = "ahubhdmi"
  alsa.class = "generic"
  alsa.device = "0"
  alsa.id = "ahub_plat-i2s-hifi i2s-hifi-0"
  alsa.long_card_name = "ahubhdmi"
  alsa.name = "ahub_plat-i2s-hifi i2s-hifi-0"
  alsa.resolution_bits = "24"
  alsa.subclass = "generic-mix"
  alsa.subdevice = "0"
  alsa.subdevice_name = "subdevice #0"
  api.alsa.auto-link = "true"
  api.alsa.card.longname = "ahubhdmi"
  api.alsa.card.name = "ahubhdmi"
  api.alsa.disable-tsched = "true"
  api.alsa.path = "hw:2,0"
  api.alsa.pcm.card = "2"
  api.alsa.pcm.stream = "playback"
  audio.channels = "2"
  audio.position = "AUX0,AUX1"
  card.profile.device = "0"
  clock.name = "api.alsa.2"
  device.api = "alsa"
  device.class = "sound"
  device.id = "43"
  device.profile.description = "Pro"
  device.profile.name = "pro-output-0"
  device.profile.pro = "true"
  device.routes = "0"
  factory.name = "api.alsa.pcm.sink"
  media.class = "Audio/Sink"
  device.description = "Built-in Audio"
  node.group = "pro-audio-2"
  node.link-group = "pro-audio-2"
  node.name = "alsa_output.platform-soc_ahub1_mach.pro-output-0"
  node.nick = "ahub_plat-i2s-hifi i2s-hifi-0"
  node.pause-on-idle = "false"
  object.path = "alsa:pcm:2:hw:2,0:playback"
  priority.driver = "1500"
  priority.session = "1500"
  factory.id = "18"
  clock.quantum-limit = "8192"
  client.id = "35"
  node.driver = "true"
  factory.mode = "merge"
  audio.adapt.follower = ""
  library.name = "audioconvert/libspa-audioconvert"
  object.id = "33"
  object.serial = "50"
  api.acp.auto-port = "false"
  api.acp.auto-profile = "false"
  api.alsa.card = "2"
  api.alsa.use-acp = "true"
  api.dbus.ReserveDevice1 = "Audio2"
  device.bus_path = "platform-soc:ahub1_mach"
  device.enum.api = "udev"
  device.form_factor = "internal"
  device.icon_name = "audio-card-analog"
  device.name = "alsa_card.platform-soc_ahub1_mach"
  device.nick = "ahubhdmi"
  device.plugged.usec = "2546156"
  device.subsystem = "sound"
  sysfs.path = "/devices/platform/soc/soc:ahub1_mach/sound/card2"
  device.string = "2"
 Formats:
  pcm
kali@opizero3 $

 よって前掲のaplay -lやaplay -lLの出力にある当該デバイスをpactl set-default-sinkすれば良いはず。

 というわけでpactl list sinksしてみるとこんな感じ

kali@opizero3 $ pactl list short sinks
48 alsa_output.platform-5096000.codec.stereo-fallback    PipeWires24-32le 2ch 48000Hz SUSPENDED
50 alsa_output.platform-soc_ahub1_mach.pro-output-0    PipeWires24-32le 2ch 48000Hz SUSPENDED
kali@opizero3 $

 つまり、48の[alsa_output.platform-5096000.codec.stereo-fallback]が、aplay -lのcard 0/device 0であり、[audiocodec]と一致するので、これにすれば良いはずなのに起動時に有効になるようスタートアッププログラムに登録しても期待した通りにならない...。

 USB Audioとして認識されるUSBマイクの方は、pactl set-default-sourceでいけてるんですけどね...。

 PipeWireが割り当ててくれてるはずの方は...。

kali@opizero3 $ pactl info
Server String: /run/user/1000/pulse/native
Library Protocol Version: 35
Server Protocol Version: 35
Is Local: yes
Client Index: 121
Tile Size: 65472
User Name: kali
Host Name: opizero3
Server Name: PulseAudio (on PipeWire 1.0.3)
Server Version: 15.0.0
Default Sample Specification: float32le 2ch 48000Hz
Default Channel Map: front-left,front-right
Default Sink: alsa_output.platform-5096000.codec.stereo-fallback
Default Source: alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.mono-fallback
...
kali@opizero3 $ pactl get-default-sink
alsa_output.platform-5096000.codec.stereo-fallback
kali@opizero3 $ pactl get-default-source
alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.mono-fallback
kali@opizero3 $

 結果、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で何の問題もないから、違うか...。

2024/05/16

 あ、もしかして...と思って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に落ち着くとは。

 いや、でも良かった................解決。

2024/05/21

 ぬーーーーーーーーーーーー...。

 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の旅、再開か...。

備考

 というか、お熱くなりがちなWi-FiドングルWLI-UC-GNM2、USBハブの不具合も相まってか、単独でUSBポートに挿さないとドングルだけでなく、例えば、2.4GHz無線レシーバーと一緒にハブにつなぐとOS起動時、認識せず、GNM2を挿し直すと共に機能するという状況に何度か遭遇。

 スマートスピーカーに使っている方は、USBマイクやUSBスピーカーともう1つある同一のWLI-UC-GNM2一緒に同一品と思われるUSBハブに挿して運用してるんですけどね。

 って挿し直せばいけるとは言え、接続時に2.4GHzの電波が干渉する結果そうなるのかも?それですね、きっと。

 USB延長ケーブルとかかましときますかね。

 ドアホン親機パネルとして稼働し始めたら、映像+大きめのボタンで操作するだけにするから、USBレシーバーの方は要らず、使うとしても一時的なので。

ホーム前へ次へ