そういえばネットブック(昔の1コアatomを積んだやつ)のOSがLMDE5だった事を思い出してLMDE6にアップデートを試みた。

 

このネットブックはwifiモジュールを内蔵しているのだけれど遅くて使いにくいので、5GHz帯対応のUSBドングルを差している。で、今回のアップデートではこいつのドライバの更新で無限ループに突入する異常が生じたのですね。

 

ドライバの更新はdkmsで行うようにしてあった。ひょっとしたらソースが旧くてカーネルについてこれなかったのかも知れないが、放置しておけばSSDの書き換え寿命を使い切ってしまうので緊急停止をかけたのですよ。

 

timeshiftで巻き戻すことも考えましたが、どうせ大した用途には使っていないのでLMDE6をクリーンインストールすることにしました。問題のドライバもgithubから改めてcloneしてインストールしたところ正常に動作しました。

 

で、素直にCinnamonで使えばよいものを、未練がましくxfce4を入れて、先日から問題になっている「フォント選択ダイアログ操作時のクラッシュ」が再現しないか確かめたのですね。

 

結果は案の定、再現しませんでした。ということで、core2duoを使っているThinkpadR500固有の問題、で決着です。昔ならここからしつこく原因追求するところだけれど、メインPCではないしCinnamonなら問題なく使えるしで、このまま終了ですな。

 

LMDE6ですが、結構いろいろ動かしてくれるのでメモリがいくらあっても足りないといった印象です。pipewireとか必要かしらん。まあ、pulseaudioが出た時も似たような事を考えましたが。

 

今どきのPCはリースアップした実働中古品でもRAM4GBは積んでいるので問題ないですが、ちょっと古めのRAM2GBくらいのPC(冒頭のネットブックがまさにそれ)で使おうとする場合は注意が必要でしょう。

デスクトップの様子。conkyを廃してCPU負荷やACPIなどをアプレットで代替したのでパネルが窮屈である。アプレットについてはxfce4で使っていたものと同様のものを探したが完全な互換品は少ない。特に天気予報が昔ながらの空港タイプなのは気が遠くなった。メニューは標準のものではない方に換装した。xfce4のwhiskermenuから移行するにはこちらのほうが良い。

 

 

承前。


xfce4にてフォント選択ダイアログを操作するとデスクトップごとクラッシュする(再起動ではなくログイン画面になる)問題は、未だ解決できていない。

 

同じLMDE6(但し32bit, CPUは4コアatom)を積んだもの、debian12にxfce4を入れたもの(こちらも32bit, CPUはpentium-m)で試してみたが再現しないので、64ビット版とcore2duoの組み合わせによるのかも知れない。同じPCでCinnamonやMATEでは再現しないので、xfce4が原因なのは間違いないと思われる。

いくら予備機とはいえ危なっかしいデスクトップは使いたくないのでCinnamonを使うことにして、いろいろ弄って起動時の専有メモリが800MBを切るようになったところで一段落つけた。

 

Cinnamonは今まで使ってこなかったのだが、よくも悪くも昔のUIで使っていて面白くない。それはxfce4も同じなのだけれど、xfce4はモジュール交換しまくって原型を留めなくする事もできる。しかしCinnamonでそれをやるのは、なんとなく気が引けるのだった。

フォント選択のダイアログを表示中、スクロールバーを掴んで上下にガシガシ動かしているとデスクトップがクラッシュする。

 

 

結構エグい、かも。

自分宛てメモ

 

アイコンに必要なファイルが全てインストールされているにも関わらず、特定のアイコンが表示されない時の対処方法

 

sudo gtk-update-icon-cache -f -t /usr/local/share/icons/hicolor

 

 

既存のパッケージの置換を試みる場合、インストール先を /usr/local 等とすることが多い。そのまま置換して使うなら問題ないが、失敗してアンインストールした時にキャッシュだけが取り残される事があるのが原因である。

 

 

LMDE6が正式リリースされたのでアップデートした。

 

アップデート手順

sudo apt update
sudo apt install mintupgrade
sudo mintupgrade

 

LMDE6 beta (amd64, ThinkPad R500, デスクトップをxfce4に換装済)

特に問題なく終了した。使用しない cupsとtoucheggを止めた。

 

LMDE5 (i686, Arrows tab, デスクトップを xfce4に換装済)

前バージョンからのアップデートであり、作業中にパッケージの削除や巻き戻しの警告が表示された。

 

再起動後、次の症状がでた。

  • 画面解像度がネイティブ解像度(ハードの最高解像度)に設定される。

xfce4から再設定した。

  • mpv で音が途切れる。

pipewireとの関係からか音切れが生じた。
mpvにて
mpv --audio-device=help とやって使えるデバイスを調べて使えそうな設定を選び、
~/.config/mpv/mpv.conf に
audio-device=pulse/alsa_output.platform-bytcr_rt5640.HiFi__hw_bytcrrt5640__sink
と書いて解決した。
なお、chromiumでは問題なかった。

  • LMDE5でビルドしたaudacious4.3.1が一部動作しない

プラグインのロードに失敗するので、再度ビルドし直した。

 

その他
LMDE5の時からcupsは外していたが、その設定は引き継がれていた。


LinuxMintではバージョンチェンジの場合はクリーンインストールを推奨している。LMDEはdebianベースだからなのか上書きアップデートが用意されているが、今後使っている間に新たな問題が生じるかもしれない。

自分宛てメモ

 

参考URL
https://web.sfc.wide.ad.jp/~sagawa/gnujdoc/automake-1.8/automake-ja_23.html


例えばインストール先のファイルのパーミッションを変更したい場合、インストール後に chmod a+x target とか実行したい。

 

automakeでは、一連のデフォルトの処理が終わった後に、任意の処理を実行できるようフックが用意されている。
フックできるのは、

install-data
install-exec
uninstall
dist
distcheck

 

例として data としてインストールしたプラグインファイルのパーミッションを変更したい場合は
data/Makefile.am の最後に

install-data-hook:
    chmod a+x $(hogefugadir)/$(hogefuga_DATA)

等と書く。
これらは単純にMakefileにコピーされて実行される。

 

気づいたこと
make DESTDIR=/home/hoge/fuga install とやって、任意のディレクトリにファイルをインストールした場合、上記のままでは「任意のディレクトリ」を認識してくれない。
 

LMDE6のベータ版をインストールしていて気づいたのだが、リポジトリにGTK4に関するものがいろいろ含まれている。

 

個人的には最近ようやくGTK3に慣れてきたところなので「もうGTK4かよ」という気持ちである。

 

で、移行に備えるべくマニュアル https://docs.gtk.org/gtk4/migrating-3to4.html を見ていたのだが、
「3と4ってほとんど別物じゃね?」
と思ったくらいに違っていた。

 

GTK+2 と GTK3 でも、違うところは違っていた。しかしGTK+2が長く使われており、その中でいろいろ取り込まれてきた要素をGTK3で整理統合した、みたいなところがあったので、移行は然程難しくはなかった。

 

GTK4には、GTK+2およびGTK3における「泥臭さ」を一掃しようとしている気配がある。
GtkBinやGtkContainer、GtkEventBoxは廃止された。GTK+2では個人的に最難関だったGtkTreeViewも過去のものになるらしい。

 

変更点が大きいこと、GTK3の開発が終了し仕様の変更が無いこと、GTK4の開発が終わっていないこと(仕様の追加がありうる事)等から当分の間はGTK3を使っていて良いような気がする。

 

等というのはCで書く場合の話であって、メジャーな言語で強力なラッパーがあればそちらで開発する人が増えるだろうから、変わる時はあっという間なんだろう、と思う。

Ubuntu派生のディストリビューションであるLinuxMintがUbuntuを捨てた姿、それがLMDEである。

 

その最新バージョン(LMDE6)のベータリリースが出たので試してみたのですね。

 

いつもは仮想環境を使うのですが、今回は廃棄待ちのノートPCにインストールしてみることにしました。

 

このPCのスペックはこんな感じです。

ThinkPad R500
CPU core2duo P8400 2.24GHz
RAM 4GB
HDD 160GB
LCD 1280x800

数年前までメインPCとして使っていたものです。CPUこそ古いのですがグラフィックス周りがそれなりで、普通に使う場合は初期のCorei5や第3世代Celeronを使ったノートPCと同等の処理能力がありました。差がつくのはコア数がものをいうパッケージビルドの時くらいでした。

 

廃棄待ちにしたのはFanErrorが止まらなくなり、正常起動しなくなったためです。エラー発生時にESCキーを押すことで強制起動しますが、安全性を考えて使用中止にしたのですね。なにより面倒だし、うるさいし(※1)。

 

インストールに先立ち、ダメ元でファンを分解し清掃してみましたが治りませんでした。回転そのものに問題はないので、回転数の検出部分がどうかしているようです。

 

コイル側に差し込んであるだけなので、簡単に分解できる。思ったより羽は汚れていなかった。

 

コイル側の様子。埃を取り払った後の写真。分解時に小指の先の半分ほどの毛玉が出てきたが、あんな大きなものが挟まった状態でよく回転していたものである。

 

部品が実装されている部分がせまく、埃がぎっしり詰まっていた。

 

ヒートパイプ及びヒートシンク。この後、水洗いしてから無水アルコールで脱脂した。

ヒートシンクには組み立て時に隙間を埋めるスポンジが貼られていたが、ベタついていたのですべて取り除いた。カメラ用のモルトプレーンでも貼ろうかと思ったのだが、かなりの高温になる箇所であり耐久性がわからなかったので止めた。

 

画面中央がCPUでその右下がグラフィックス関係かなにか。ヒートパイプはこの2つに付くようになっている。グリスを塗り替えたので、少しは冷えるようになったはず。

 

CMOSバックアップ用の電池だが、多分このPCが製造されてから一度も交換されていないと思われる。分解時に取り外したのだが、基板側のコネクタ(樹脂部分のみ)まで一緒に抜けてしまって焦った。

 

 

LMDE起動後、xsensorsで監視してみたのですがFanの回転数は0のままでした。OS側処理に抜けがある可能性は捨てきれませんが、起動時の事と合わせて故障確定としました。

 

その後、xsensorsに代えて Cinnamonのアプレット(CPU Temperature Indicator (temperature@fevimu))で監視してみたところ、

 

室温30度にて

待機時 42度前後
音楽再生時 45.5度
youtube再生(480px) 57度前後

 

となったので、実用上問題ないレベルに冷却されているものとしました。

 

 

 

 

さて、LMDE6ですがインストールそのものは特に問題なく終了したものの、次の問題が生じました。

 

  1. bluetoothが認識しない。デバイスを探しに行くも見つけられない
  2. trackpoint, trackpad ともに動かない。認識すらしない
  3. fcitxを組み込まない。システム設定→入力方式で設定するのだが、再ログインしても反映されない。

 

1については、このPCにbluetoothが乗っている事自体よく覚えていなかったので詳細不明。現状では実用上問題ないので特に追求しません。

 

2はちょっと不便なので他のOS(Puppylinux4系)をCDから起動して試したが同様でした。いつだったかのようにPCを組み立てる際に断線した可能性もあるのでチェックしたが特に異常は認められませんでした。古いPCなので故障していてもおかしくないので、これも後回しです。

 

3が大問題で、結局手動で

fcitx5
fcitx5-mozc

をインストールし、im-configで設定を通しました。この辺はいかにもベータ版といった感じです。

 

 

主な追加設定
LANへの接続は、インストール時は有線を使用し、その後 PCカードの無線LAN(2.4GHz)を増設してfirmware-b43-installer をインストールしました。

UIのフォントがUbuntu Regular だったので Noto Sans CJK JPに変更しました。但し、MonospaceだけはNotoでは細すぎるためMonospace Regularを採用しました。

スワップ領域をRAM上に取ることにしてインストール時からHDDにスワップ領域は作成しませんでした。zram-toolsをインストールし、/etc/default/zramswap の設定で zstd, 25%としました。

 


その他の問題(多分、LMDE6は無罪)
audaciousで音楽ファイルを再生していると頻繁に音切れが生じました。圧縮音源(mp3やaac)よりflacで顕著でした。
音源ファイルはLAN上にあるので iperf3 で速度を測ったところ、senderとreceiverともに13Mbits/sec でした。
ちなみに同じ室内で5GHz帯で接続しているタブレットPC(LMDE5)は50Mbits/sec程度、有線接続しているメインPCは100Mbits/secでしたから、結構遅いと思います。

PCカードの無線LAN子機は言うまでもなく2.4GHzを使う旧式のものです。
今チェックしたところ34ものIDを拾っており、うち1つの信号レベルはこの部屋のルーターよりも強いです。この混雑さ加減が速度がでない原因と思います。

 

※1 エラーゆえの消音不可なBEEP音がフルボリュームで鳴り響きます。

休みの日は終日ネットラジオを鳴らしていることが多い。

 

ハードはちょっと前までRaspberry Pi Zero Wだった。これはOLEDを繋いで時計と温度計も兼ねさせた多機能なもので、それなりに重宝していた。しかし先日、Raspberry Pi Pico で温度計付き時計を作ったことから一時引退にしてしまった。

 

代わりに使っているのが、Atom時代のタブレットPCで、LMDE(32bit)に自作のネットラジオ(アプリケーションソフト)を入れて鳴らしている。

 

この自作アプリはmpvをバックエンドにしたフロントエンドで、GTKとCで書いたなんの変哲もないものである。

mpv はsystemdにてデーモンにしておいて、UNIX Socket でフロントエンドと通信して動かしている。

mpv はそのままでもストリーミングに対応しているので、普通の(?)ネットストリーミングならURLを渡せばすぐに音が出てくる。

 

しかし、日本国内で使われているradikoは、フリーであるにもかかわらず地域判定の必要性からか認証が必要で簡単にはいかない。

といっても、然程難しいものでもないので、ネットを漁ればradiko聴取用のスクリプトはいくらでも出てくるのであった。

 

今まで使っていたのは

NanoPi NEOにインストールしたMPDでradikoを聞く
https://burro.hatenablog.com/entry/2019/02/16/175836

で紹介されている中継サーバーだった。これはサーバーなので、ストリーミングを解するソフトであれば何でもクライアントになれる利点がある。
その一方、ラジオとして使わない時も一定量のメモリを消費する(はず)というデメリットもあった。

一定量のメモリ、などと言っても昨今のハード事情であれば然程問題になることもなく、実際、上記のRaspiZeroWでも使っていたくらいである。

 

ところが、そのRaspiZeroWの挙動を見ていておかしな事に気づいたのですね。それは1日中Radikoを鳴らしておくとメモリの消費量がすごいというものです。RAMで不足してSWAPし始める程でした。

 

以前はこんな事はなかったと思うのですが。まあ、PCで使っていた時はデスクトップは1日に1回は再起動する(あるいは電源を切る)ので気づかなかったのかも知れません。中継サーバーそのものはスクリプトもフレームワークも旧いままですが、RaspiのOSは都度新しいものを使うようにしていたので、その辺りでリグレッションが生じたのかも知れません。

 

いずれにせよ、この中継サーバーをこれ以上使い続けるのは困難であるのは変わらない(実はこれもRaspiZeroWを一時引退させた理由の一つ)ので、代替手段を講じなくてはなりませんでした。

 

radikoが認証後に返してくるのはHLSなのでmpvで扱うことができます。であれば、認証部分だけ書いて自作ネットラジオに実装すれば良いのですが、地味に面倒なので手を付けてませんでした。

 

しかし、ネットを漁っていて見つけたスクリプトがとても使いやすそうだったので、借用して取り組んでみることにしました。

radikoの再生や録音をツールで自動化
https://kakurasan.tk/raspberrypi/raspberrypi-automate-playing-and-recording-radiko/

上記スクリプトでは再生にffplayを使っていますが、mpvで同様のことを行うには次の様にします。

os.system( f"mpv  -http-header-fields='X-Radiko-Authtoken:{token}'  '{m3u8}'")

 

しかし、これだとデーモナイズされているmpvと通信して再生、ということができません。

 

なので、このようにしました。

s0 = f"http-header-fields='X-Radiko-Authtoken:{token}'"
s1 = f"{m3u8}"
s2="{%s}¥n" % '"command": ["loadfile", "{0}"]'.format(s1)

s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/run/user/1000/mpvsocket")   # mpvとの通信ソケット
s.send(s2.encode())
d = s.recv(1024)
s.close()

変数s0にhttpヘッダを入れていますが使っていません。mpvでJSON IPCを使って渡す方法を見つけられなかった(探し方が悪いのかも知れない)からです。とりあえず無くても音は出ますが、ひょっとしたら何か不具合があるかも知れません(長時間接続していると切断される、とか)。

 

次にこのスクリプトを自作ネットラジオにどのように渡すか、です。埋め込んでしまう事も考えたのですが、後々のメンテナンスを考えてボツにしました。

 

いろいろ考えてプレイリスト側に細工することにしました。

 

通常、プレイリストはこのように書きます。(m3uの場合)

#EXTINF:-1,radioparadise.com(main mix) / radioparadaise.com(main mix,320k,aac) 
http://stream.radioparadise.com/aac-320

radikoの場合はこんな風に書くことにしました。

#EXTINF:-1,Tokyo / 文化放送
plugin:/radiko.py/QRR

 

自作ネットラジオ側でプレイリストを読んで、スキーム部分が「plugin」なら続く部分をスクリプト名とみなして処理する、という、自分勝手なものです。自分で作って自分で使うのでこれで充分です。なお、スキームの「:」の後ろのスラッシュが一つ少ないのは、pathを作る際の手間を減らす工夫(単なる手抜き)です。

 

コード(抜粋)はこんな感じです

 

    gchar *scheme = g_uri_parse_scheme (url);

    if (!strcmp (scheme, "plugin")) {
        // url の先頭がpluginであれば呼び出しにかかる
        gchar *station = g_path_get_basename (url); // basename をplugin の引数にする

        gchar *p_path = g_path_get_dirname (url);
        gchar **plugin = g_strsplit (p_path, ":", 2);
        if (plugin != NULL) {
            gchar *command = g_strdup_printf ("%s/mpvradio/plugins%s %s",
                                        DATADIR, plugin[1], station);
            system (command);
            g_free (command);
            g_strfreev (plugin);
        }

        g_free (p_path);
        g_free (station);

    }
    else {
        // url や playlist であればそのまま mpv に送る
        mpvradio_ipc_send ("{¥"command¥": [¥"set_property¥", ¥"pause¥", false]}¥x0a");
        message = g_strdup_printf ("{¥"command¥": [¥"loadfile¥",¥"%s¥"]}¥x0a", url);
        mpvradio_ipc_send (message);
        g_free (message);
    }

プラグインスクリプトの格納先が固定だったり、処理の呼び出しが system にそのまま投げたりとαバージョン感が色濃く漂ってますね。

使い勝手ですが、遅いハードだとどうしてもpythonのロード待ちが生じて選局の時に一瞬の間が空いてしまいます。OS側でキャッシュしてくれているはず、と思うのですが。

 

しばらく使い込んでヘッダを渡していない事なんかの不具合を見極めたいと思います。

 

既知の問題点

  • system()で直接呼び出しているので、スクリプトに実行許可がないと失敗する。
  • mpvから、現在再生中の曲情報を返すようにしている(mpvのluaスクリプト)が、radikoの場合返されるのはHLSのチャンクファイル名そのもので、曲名はおろか局名すら得られない。
     

 

参考URL

 

NanoPi NEOにインストールしたMPDでradikoを聞く
https://burro.hatenablog.com/entry/2019/02/16/175836

 

radikoの再生や録音をツールで自動化
https://kakurasan.tk/raspberrypi/raspberrypi-automate-playing-and-recording-radiko/

 

縦長で使っているところ。xfce4を流用する上で一番の問題は実行中のアプリケーション一覧(キーボード操作でいうところのalt+tab)を出せない事で、滅多に使わない「ウィンドウメニュー」プラグインで凌いでいる。

 

 

atom を積んだタブレットPCをLMDEで使っている。

 

ファンレスで埃の吸い込みを気にしなくて良いことから、枕元に置いて寝床PCにしています。それなりに使えますが、UIがデスクトップの流用(Xfce4)なので本物(?)のタブレットに比べると使い勝手はよくありません。

 

ハード的にはwacomの感圧と電磁誘導を積んでおりLinuxから使えるようになっているので、アプリケーション層までの間に何か挟めば、使えるジェスチャーが増えるはずです。

 

ネットを漁ったところ、touchegg というデーモンを見つけたので試してみました。

https://github.com/JoseExposito/touchegg#installation

 

LMDEではppaの追加ができなかったので(余談だがLinuxMint20.3ではリポジトリに収録されている)ソースファイルをダウンロードして自前でビルドしました。というより、ppaで扱うのはamd64だけのようで、今回のタブレットPCはi686で動いているのでどのみち自前ビルドしなくてはならないようです。

 

ビルド環境はcmakeになっていたので、cmakeをインストールして

mkdir build; cd $_  等としてから

cmake .. です。

ランタイムライブラリは1つ不足していただけで他はdevファイルの不足だったので、OS(debian)やデスクトップで標準的に使用されているライブラリで構築されているようです。

 

終わったら、

sudo make install
sudo systemctl enable touchegg
sudo systemctl start touchegg

このままではダメで、クライアントが必要なので端末から

touchegg &

xfce4の場合は、「設定」→「セッションと起動」→「自動開始アプリケーション」でtouchegg を新規に設定すれば、次回ログインから使えるようになります。

 

さっそくいろいろと試したところ、chromium で(ハードが遅いためレスポンスが悪く実用的でないものの)ピンチングが使えるようになりました。また、デスクトップでは3本指でウィンドウの左右タイリングや、5本指(4本指かも知れない)での画面回転(注1)が動作しました。

 

2本指スクロールは使い勝手が悪くて廃止したそうです。gtk3が対応しているのでほとんどのアプリケーションでは動いているように見えます。しかしgtk3での実装が今ひとつオカシイ(2本めの指が着地する前に、1本目の指が押さえたハイパーリンクやボタンのクリックが動く)ので、やはり使い勝手はよくありません。

 
参考URL
https://wiki.archlinux.jp/index.php/Touchegg
 

注1

デフォルトの設定で、4本指のIN動作に SuperL+A が割り当てられていたためでした。SuperL(タブレットのベゼル上のWindowsボタンを押すとこのコードが生じる)に自作のrotateプログラムを割り当てていたため、画面回転していました。

    <gesture type="PINCH" fingers="4" direction="IN">
      <action type="SEND_KEYS">
        <repeat>false</repeat>
        <modifiers>Super_L</modifiers>
        <keys>A</keys>
        <on>begin</on>
      </action>
    </gesture> 

2022年8月11日16時追記

 


Search

Calendar

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< March 2024 >>

Archive

Mobile

qrcode

Selected Entry

Comment

  • avahi がやたらと遅い件
    user1
  • feedly.com が jugem を追わなくなった件
    sumi

Link

Profile

Search

Other

Powered

無料ブログ作成サービス JUGEM