2026/03/19

DGX Spark互換のThinkStation PGXにNemoClawをインストールして天気を取得した

NemoClawのインストール

NemoClawのインストール方法はNVIDIAのサイトを参考にしましたが、一点だけ注意点が。

私の環境だと、Step6 Run the NemoClaw onboard wizardでnemoclaw onboardを実行した結果が、どうしてもollama-localになりませんでした。
以下のようになってしまいます。
nvidia/nemotron-3-super-120b-a12b (NVIDIA Cloud API)

X(旧twitter)で見つけたのですが、ollamaを立ち上げた状態で以下のように実行するとollamaに接続されるようです。
$ NEMOCLAW_EXPERIMENTAL=1 nemoclaw onboard

その後、使用するモデルをnemotron-3-super:120bに変更しました。
サンドボックスの外(nemoclaw my-assistant connectの実行前)で以下のコマンドを実行します。
$ openshell inference set --provider ollama-local --model nemotron-3-super:120b

天気を取得できるようにする

OpenClawでは試していませんが、NemoClawはサンドボックスから外にアクセスするのに制限があり、天気の取得ができませんでした。

まず、サンドボックスの外で以下を実行し、現在の設定を取得します。
$ openshell policy get my-assistant --full > current-policy.yaml

current-policy.yamlを編集し、network_policies:の下にぶら下がるようにして以下を追加します。
wttr.in:
  name: wttr.in
  endpoints:
  - host: wttr.in
   port: 443
   protocol: https
   rules:
   - allow:
     method: '*'
     path: /**
  - host: wttr.in
   port: 80
   protocol: http
   rules:
   - allow:
     method: '*'
     path: /**
  binaries:
  - path: /usr/bin/curl
  - path: /usr/local/bin/node

編集したcurrent-policy.yamlを読み込みます。
$ openshell policy set my-assistant --policy current-policy.yaml --wait

これで良いかと考えたのですが、サンドボックス内でopenclaw tuiを実行して天気を聞いても答えてくれませんでした。
 高崎市の今の天気は何ですか?


 I’m unable to reach external weather services (such as wttr.in or Open‑Meteo) from this environment—outbound HTTPS connections are
 blocked, so a curl https://wttr.in/Takasaki request would not succeed. Because of that I can’t retrieve the real‑time weather for
 Takasaki at the moment.

 If you have a local source (e.g., a cached file, an internal API endpoint, or a weather service that’s reachable within this network)
 you can share it here and I’ll gladly pull the information from there. Otherwise you’ll need to check a weather website or app
 directly for the current conditions.

どうやらAIが以前失敗していたのを引き摺っているらしく、以下のように命令したところ上手く取得できました。
 あなたは先ほどまで通信がブロックされていましたが、現在は管理者がOpenShellのポリシーを更新し、wttr.in
 への通信権限を付与しました。推測で回答するのをやめて、実際にターミナルで curl -s https://wttr.in/Takasaki
 を実行し、取得した結果をそのまま教えてください。


 現在の高崎市の天気は「Partly cloudy( parcialmente 雲 )」、気温は 14℃、風速は 13 km/h です。

その後はちゃんと取得してくれるようになったようです。
 現在の福島県白河市の天気は?


 現在の福島県白河市の天気は「⛅️( parcialmente 雲)」、気温は +10 ℃、風速は ↘ 17 km/h です。

2026/03/15

aerc、notmuch、lieerでGmailを読む

2025/10/02

Linux、MPD、UpmpdcliでQobuzとローカルファイルの鑑賞環境を構築した

音楽鑑賞用のPCはDebian 12を使用しています。
私にしては珍しくPlamo Linuxではありません。
最小インストールにしたためかsudoすら入っていません。

以下が行なえることを目的とします。
  • Debianマシンでマウントしているディスクの音楽ファイルの再生
  • Qobuzのストリーミング再生
最初の項目はMPD単体でも行なえますが、私にはしっくりくるクライアントが見つからなかったです。

MPDとUpmpdcliを組合せると、1つのOpenHomeクライアントで両方の項目を行なえます。

OpenHomeクライアントにはiPad用のfidata Music Appを使用することにしました。

fidata Music Appはお好みのOpenHomeレンダラーとサーバーを使用することができます。
fidataなどは無くも使えます。
I-O DATAさん、太っ腹です。


まずはMPDのインストール。
# apt install mpd

次にUpmpdcliのインストール。
以下を参照してください。
Upmpdcli and associated libraries downloads

記憶を頼りに書きます。

リポジトリキーをダウンロードし、所定の場所に移動します。
# wget https://www.lesbonscomptes.com/pages/lesbonscomptes.gpg
# mv lesbonscomptes.gpg /usr/share/keyrings/


次にupmpdcli-bookworm.listをダウンロードし、所定の場所に移動します。
# wget https://www.lesbonscomptes.com/upmpdcli/pages/upmpdcli-bookworm.list
# mv upmpdcli-bookworm.list /etc/apt/sources.list.d/


# apt update
# apt install upmpdcli upmpdcli-qobuz upmpdcli-uprcl



MPDの設定です。
/etc/mpd.confを編集します。

私の行なった設定の肝は、music_directoryとplaylist_directoryを同じディレクトリにしたことです。

同じディレクトリにしないと、MPDクライアントで作ったプレイリストをOpenHomeクライアント(私の場合はfidata Music App)で使うことができなかったためです。

MPDクライアントによって違うのか分かりませんが、私の使用したMPDクライアントで作成するプレイリストは音楽ファイルのパスを相対パスで記載します。
しかし、相対パスだとOpenHomeクライアントで使用できませんでした。

ちなみに、プレイリストを絶対パスで記載すると、music_directoryとplaylist_directoryが異なっていても問題ありませんでした。

以下は私の環境で変更したmpd.confの設定項目です。

music_directory                 "/music/Music"
playlist_directory              "/music/Music"
bind_to_address                 "any"
audio_output {
        type            "alsa"
        name            "DACの名前"
        device          "環境によって異なります"
}


Upmpdcliの設定です。
/etc/upmpdcli.confを修正します。

気をつけないといけないのは
qobuzformatid = 27
としたところでしょうか。27でハイレゾ再生できるようにしました

以下は私の環境で変更したupmpdcli.confの設定項目です。

upnpiface ="wlp2s0"
upnpav = 1
openhome = 1
mpdhost = localhost
mpdport = 6600
ohmetapersist = 1
plgmicrohttpport = 49149
qobuzuser = QobuzのユーザID
qobuzpass = Qobuzのパスワード
qobuzformatid = 27
uprcluser = activated
uprclmediadirs = /music/Music

プレイリストですが、メインはちょっと面倒ですがMPDクライアントで作成しておくことにしました。
このようにしておくとMPDクライアントでも、他のOpenHomeクライアントでも使うことができます。
ただし、OpenHomeの方に即時反映されないようです。
時間経過で反映されるのかもしれませんが、即時反映させるにはupmpdcliを再起動させる必要があります。
# systemctl restart upmpdcli

ちょっと簡単に保存しておきたいプレイリストはfidata Music Appのローカルプレイリストを使います。

2023/10/28

GPD WIN4のPlamo Linuxで充電中にフリーズする問題の対策

GPD WIN4にPlamo Linuxをインストールして使っていますが、充電中に反応しなくなる(フリーズする)現象に悩まされていました。
と言っても、それ程気にしていなかった時期も長く、いつから悩んでいたのか覚えていません。

私のGPD WIN4はRyzen7 6800U搭載です。

さまざまなカーネルパラメータを試してはフリーズしていました。
(下記のつぶやきではGPD WINになっていますがGPD WIN4の間違いです。)

ついに見付けたのが
processor.max_cstate=1
というカーネルパラメータです。
https://gist.github.com/dlqqq/876d74d030f80dc899fc58a244b72df0

少しテストしてみたところ、確かにフリーズしないようです。

しかしバッテリーで動いている時もC1だけになってしまうのはかなり不安です。
可能であれば、
・充電中はC1のみ
・充電していない時は制限解除
というように制御したいです。

ChatGPTやMicrosoft Bingに尋ねたところcpupowerというコマンドで全てのCPUコアを一度の実行でC-Stateを変更できそうです。

また、Plamo Linuxではデフォルトで全てのACPIイベントが
/etc/acpi/handler.sh
で処理されているようなので、ここで充電開始と終了を処理する際にcpupowerコマンドを実行すれば良いのかなと考えました。

その他システム起動時に充電中であった場合は
/etc/rc.d/init.d/
以下にその状態をみて必要であればcpupowerを実行するファイルを作成し、
/etc/rc.d/rc3.d/や/etc/rc.d/rc5.d/
以下にリンクを作成すれば良さそうです。


・cpupowerの入手

まず核となるcpupowerコマンドの入手方法を探しました。Arch LinuxのPKGBUILDを探してみたり、Ubuntu Package Searchを検索してみたのですが、cpupower-guiはあるのですがcpupowerが見付かりません。
Plamo Linuxにデフォルトで入っていないか/var/log/packageを見てみましたがありません。
何気無く/vae/log/package以下でgrep検索してみたところ、カーネルソースに含まれていることが分かりました。

カーネルのPlamoBuildスクリプトに以下の部分を追加し、カーネルと一緒にパッケージを作成するようにしました。
  echo "Building cpupower package"
  rm -rf $P
  mkdir $P
  cd $B/tools/power/cpupower
  make install DESTDIR=$P libdir=/usr/lib
  install_tweak
  convert_links
  cd $P
  /sbin/makepkg ../cpupower-${vers}-${arch}-${build}.${compress}


2023/10/29追記
・充電中はC1のみにし、充電していない時は制限解除する

udevを使うとシステム起動時、充電開始/終了、スリープ中に充電開始/終了の全ての状態を見てcpupowerコマンドを実行できました。
/etc/udev/rules.d/99-disable_cstate.rulesを下記の内容で作成します。
SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/usr/bin/cpupower idle-set -E"
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/usr/bin/cpupower idle-set -D 2"
作成したルールを読み込ませます。
# udevadm trigger


以下はudevを使用する場合は必要ありません。


・充電開始でC1のみにし、終了時に制限解除する

/etc/acpi/handler.shの下記の部分を修正しました。
CPUPOWER="/usr/bin/cpupower"
として定義されています。
    ac_adapter)
        case "$2" in
            AC|ACAD|ADP0|ACPI0003:00)
                case "$4" in
                    00000000)
                        logger 'AC unpluged'
                        if [ -x $CPUPOWER ];then
                            $CPUPOWER idle-set -E
                        fi
                        ;;
                    00000001)
                        logger 'AC pluged'
                        if [ -x $CPUPOWER ];then
                            $CPUPOWER idle-set -D 2
                        fi
                        ;;
                esac
                ;;


・システム起動時に充電中であればC1のみにする

まず下記のシェルスクリプト(disable_cstate)を作成しました。
#!/bin/sh

status=$(cat /sys/class/power_supply/BATT/status)

if [ $status = "Charging" ];then
    /usr/bin/cpupower idle-set -D 2
fi

次に下記のファイルを/etc/rc.d/init.d/disable_cstateとして作成しました。
#!/bin/sh
. /lib/lsb/init-functions

case $1 in
   start)
        log_info_msg "Starting disable cstate..."
        start_daemon /usr/local/bin/disable_cstate
	evaluate_retval
        ;;
   *)
        echo "usage: $0 [start]"
        exit 1
        ;;
esac

あとは/etc/rc.d/init.d/disable_cstateのリンクを/etc/rc.d/rc3.d/等の下に作成しました。


その他、スリープ中に充電開始/終了した場合のテストをまだ行なっていません。
意図した処理は想定通り動いています。

2023/09/21

KDE Plasmaインストール

GPD WIN4のPlamo LinuxにKDE Plasmaを入れてみました。

切っ掛けはGoogle Contactと連携させたくてkaddressbookを入れてみたことです。
それからkorganizer入れてみたり何となくkonqueror入れてみたりして遊んでいたのですが、もうKDE入れられるんじゃないかと思いたち実際に入れました。

KDEのバージョンは1年以上前の物です。
これはPlamo Linuxから提供されているライブラリ等をアップデートせずにインストールしたかったからです。
真っ先に引っ掛るのがextra cmake moduleでした。PlamoのバージョンだとKDE関連のライブラリ等が1年前の物しかcmakeが通りません。
extra cmake moduleをアップデートするのは簡単で、実際にパッケージを作成しましたが、前述のようにPlamoのバージョンを使用する事にしました。
extra cmake moduleがアップデートされたらKDEもアップデートするかもしれません。

KDEにはタッチスクリーンで操作しやすい事を期待しましたが、現在のところ特に使いやすいとは思いません。
悪くはないので暫く使ってみたいと思います。


ちなみに最初の目的であったkaddressbookとGoogle Contactsとの連携はまだ出来ていません。