目次: Arduino
もはやArduino全然関係ないですが、Arduinoが相棒のシステム系の話繋がりってことで……。Xfce4の調査をするにあたって設定変更を頻繁にやります、その際にGUIでポチポチやるのがだるい&ROCK 3Cはあまり速いマシンではないので、CUIからXfce4の設定を確認&設定する方法をメモしておきます。
Xfce4の設定ファイルはXMLで.config/xfce4/xfconf/xfce-perchannel-xml/の下にあります。例えばこれから調査しようとしているスクリーンセーバーの設定は.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xmlで私の環境だとこんな感じです。
<?xml version="1.0" encoding="UTF-8"?>
<channel name="xfce4-screensaver" version="1.0">
<property name="saver" type="empty">
<property name="mode" type="int" value="0"/>
<property name="themes" type="empty">
<property name="list" type="empty"/>
</property>
<property name="enabled" type="bool" value="false"/>
<property name="idle-activation" type="empty">
<property name="enabled" type="bool" value="false"/>
<property name="delay" type="int" value="1"/>
</property>
<property name="fullscreen-inhibit" type="bool" value="false"/>
</property>
<property name="lock" type="empty">
<property name="enabled" type="bool" value="false"/>
</property>
</channel>
設定に間違ったtype, valueを書くと無視されてデフォルト値として受け付けます。Xfce4の親切機能ですがCUIユーザーにとっては罠です。CUIから設定読み書きする場合にtype(特にint/uint)を間違えると、設定が全く反映されていないように見えるため、めっちゃハマります、というかハマりました。ダメな時は無視しないでダメなところを言ってほしい。
現在の設定を読むにはxfconf-query -c (チャネル名) -p (プロパティ名)を使います。チャネル、プロパティの一覧は-c (チャネル名) -lで出せるので、組み合わせて全部ダンプするならこんな感じです。
以降の全操作例に共通ですが、デスクトップの設定はログインしたユーザーのD-Busセッションと関連しているので、
ログインした画面から操作するか、SSHなら環境変数を指定する必要があります。
$ export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus $ xfconf-query -l Channels: parole xsettings thunar-volman xfce4-panel xfce4-settings-manager xfwm4 xfce4-screensaver keyboards xfce4-desktop xfce4-power-manager thunar xfce4-notifyd xfce4-keyboard-shortcuts xfce4-session displays $ xfconf-query -c xfce4-screensaver -l /lock/enabled /saver/enabled /saver/fullscreen-inhibit /saver/idle-activation/delay /saver/idle-activation/enabled /saver/mode /saver/themes/list
$ export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus $ for i in `xfconf-query -c xfce4-screensaver -l`; do echo $i ---; xfconf-query -c xfce4-screensaver -p $i; done /lock/enabled --- false /saver/enabled --- false /saver/fullscreen-inhibit --- false /saver/idle-activation/delay --- 1 /saver/idle-activation/enabled --- false /saver/mode --- 0 /saver/themes/list --- Value is an array with 1 items: screensavers-xfce-popsquares
設定するにはxfconf-query -c (チャネル名) -p (プロパティ名) -t (型名) -s (値)を使います。例えばスクリーンセーバーを無効にするには、/saver/enabled, /lock/enabled, /saver/idle-activation/enabled辺りを全部falseにするとよいです。
$ export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus $ xfconf-query -c xfce4-screensaver -p /saver/idle-activation/enabled -n -t bool -s false $ xfconf-query -c xfce4-screensaver -p /saver/enabled -n -t bool -s false $ xfconf-query -c xfce4-screensaver -p /lock/enabled -n -t bool -s false
さっき書いた通り、このtypeがかなり曲者なので調べ方もメモしておきます。
値のtype, valueの調べ方はGUIで該当する項目を設定してみることです。GUIの設定項目とプロパティ名の対応がわからないときはmonitorモードを使うと便利です。
$ export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus $ xfconf-query -c xfce4-screensaver -m Start monitoring channel "xfce4-screensaver": #### Enable Screensaverを変えた set: /saver/enabled set: /saver/enabled #### Activate screensaver when computer is idleを変えた set: /saver/idle-activation/enabled set: /saver/idle-activation/enabled #### Regard the computer as idle after:を変えた set: /saver/idle-activation/delay set: /saver/idle-activation/delay
GUIから設定を変更して、XMLファイルを開き、書き換わったプロパティ名を頼りに探せば正しいtype, valueがわかるはずです。XMLは更新が遅い?のかすぐ見ると値が古いことがあります。少し経ってから見たほうが良いかもしれません。
もう1つの方法はD-Busで聞く方法です。こちらは即応のようですし、型名も出るので便利です。
$ export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus
$ gdbus call --session --dest org.xfce.Xfconf \
--object-path /org/xfce/Xfconf \
--method org.xfce.Xfconf.GetProperty \
xfce4-screensaver /saver/idle-activation/delay
(<1>,)
#### uintのプロパティだとこんな感じになる
$ gdbus call --session --dest org.xfce.Xfconf \
--object-path /org/xfce/Xfconf \
--method org.xfce.Xfconf.GetProperty \
xfce4-power-manager /xfce4-power-manager/dpms-on-ac-off
(<uint32 0>,)
XMLにせよD-Busにせよ、いずれの場合もGUIで設定を変更した後に見てください。CUIで間違った値を書いた後だと、当然ながら間違った値が読み出されます。
この記事にコメントする
目次: Arduino
以前作ってTarget-1で稼働中の的あてゲーム、Linux側システムにRadxa ROCK 3Cを使っていて、ずっとDebian 11(Bullseye)で稼働しています。お店のシステムはネットワークに繋げていないので、アップデートしていないこと自体は問題ありません。とはいえ故障して新しいボードに置き換えたときに新しいイメージで稼働しないとなると困ります。
実は去年あたりにアップデートしたらどうなるのかちょっと試したら、全然動かなくなってて、直すのも調べるのも面倒で挫折してました。再チャレンジです。
Radxaの公式イメージ配布サイト(Images Download - Radxa Docs)で配布されているROCK 3C向けDebian系イメージは2種類あります。
現在のDebian 11 + Xfce4からDebian 12 + KDEにするには、デスクトップ環境入れ替えなきゃいけなくて面倒なので、とりあえずDebian 11 -> 12アップデート = Debian 12 + Xfce4環境にします。これくらいなら動くでしょ?と思ったら全然動きません。マジかよ、なんでだよ。正確に言うとゲームシステム自体は起動しますが、デスクトップ環境と描画周りがかなり怪しい動きです。目立っておかしいところは下記の3つです。
一番困る奴から見ていこうと思います。
お店で稼働しているROCK 3Cはキーボード未接続なので、自動ログインに失敗するとめちゃ困ります。しかしなぜこうなるのか全然わかりません。うまくいかないときの/var/log/Xorg.0.log.oldを見ると、
[ 10380.104] (II) modeset(0): Output HDMI-1 connected
[ 10380.104] (II) modeset(0): Using exact sizes for initial modes
[ 10380.104] (II) modeset(0): Output HDMI-1 using initial mode 1920x1080 +0+0 ★1920x1080で起動した
[ 10380.104] (==) modeset(0): Using gamma correction (1.0, 1.0, 1.0)
[ 10380.104] (==) modeset(0): DPI set to (96, 96)
(...略...)
[ 10387.451] (--) modeset(0): HDMI max TMDS frequency 225000KHz
[ 10387.499] (II) modeset(0): Allocate new frame buffer 1024x768 stride ★1024x768に切り替えようとして、クラッシュ
[ 10387.527] (EE)
[ 10387.527] (EE) Backtrace:
[ 10387.529] (EE) 0: /usr/lib/xorg/Xorg (OsLookupColor+0x188) [0xaaaab37b08d8]
[ 10387.530] (EE) unw_get_proc_info failed: no unwind info found [-10]
[ 10387.530] (EE)
[ 10387.530] (EE) Segmentation fault at address 0x6af1a5a5ffbea626
[ 10387.530] (EE)
Fatal server error:
[ 10387.530] (EE) Caught signal 11 (Segmentation fault). Server aborting
[ 10387.530] (EE)
[ 10387.530] (EE)
Please consult the The X.Org Foundation support
at http://wiki.x.org
for help.
[ 10387.531] (EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.
[ 10387.531] (EE)
[ 10387.706] (EE) Server terminated with error (1). Closing log file.
ちなみに自動ログイン時にクラッシュ、X.orgが再起動しているため、Xorg.0.logではなくXorg.0.log.oldを見る必要があります。ややこしいな。ログには特に情報がなく、わかるのは解像度を切り替えようとしたときにクラッシュしたことくらいです。X.orgかXfce4かGPUドライバ(GPU HWはMali-G52)ですかね……。
あら?解像度切り替えで死んでしまうなら、解像度を切り替えなければ良いじゃないこと?(by Claude先生)だそうで。暫定対策としてX.orgの設定を変更して、解像度を最初から1024x768にします。ROCK 3Cの環境はちょうど良いことに、/etc/X11/xorg.conf.d/20-modesetting.confが置いてあるので、こいつを書き換えましょう。
### Valid values for rotation are "normal", "left", "right"
Section "Monitor"
Identifier "Default Monitor"
Option "Rotate" "normal"
Option "PreferredMode" "1024x768" ★この行を追加する★
EndSection
変更後は解像度変更が発生しなくなり、自動ログインに失敗しなくなりました。とりあえずこれで良いでしょう。
しばらく放置すると画面が消えるので、運用上かなり困ります。調べてみると画面が消えるわけではなく、スクリーンセーバーを無効にしているのにスクリーンセーバーが1分で起動しているようです。
設定は上記の画面の通りで、関係する設定項目を書き起こすとこんな感じです。
普通は上位のEnable Screensaver = Falseだから、従属のActivateなんちゃらはTrue/False関係なくスクリーンセーバーが起動しないと思いますよね。普通はそうですが、Xfce4は両方きっちりFalseにしないとスクリーンセーバーが起動します。
挙動が謎すぎてClaude先生にこれバグなの?コード診てくんね?って愚痴ってたら「Xfce4のバグで4.18.3で直ってます、Debian 12は4.16.0なのでバグがまだ直ってないです」とのこと。ええー?こんな超基本的な設定がバグってる……?
興味がわいたので、次回はXfce4を調べてみようかと思います。
この記事にコメントする
| < | 2026 | > | ||||
| << | < | 10 | > | >> | ||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| - | - | - | - | 1 | 2 | 3 |
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
2026年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: