†Linuxなんて大キライ†

XenialPup-7.5のLXDE化

作成開始日 2023.06.18
最終更新日 2024.02.25

XenialPup-7.5は、Pentium Mなどの非PAE環境でも動作する、恐らく最後のPuppy Linux。骨董品のノートPCなどには貴重なバージョンなのだが、やはりデフォルトのJWM/ROX環境では実用は厳しい。こういう時にはLxPupが頼りになるのだが、なぜか、LxPupXenialはウチの環境では起動しない。そこで、とりあえず、UI周りだけでもLXDE化しようと、PCManFM、LXPanel、LXTerminalをインストールしてみた。これについては【別項参照】

が、やはり、擬似環境は擬似環境で、きちんとしたLXDE環境には及ばない。そこで、自力でXenialpupのLXDE化ができないか、挑戦してみた。ちなみに、パケマネからUbuntuのLXDEパッケージをインストールできるので、その意味ではLXDE化は簡単と言えるのだが、まともに使えるかどうかは全く別問題。実用的な環境を作るためには、相当な設定変更が必要だった。また、未だに「trash:///」や「network:///」などは未サポート状態。

と言うことで、現時点までのLXDE化作業をまとめておく。なお、「自力でLXDE化」と言っても、LxPupの成果を借用している部分が非常に多い。「外して・はめて・上手く行った」の域を超えるものではない。技術的な素地に基づかない、単なる試行錯誤の結果である。

リポジトリの更新とLXDEパッケージのインストール

ベースとしているシステムはXenialpup-7.5日本語シンプル版r1b。パケマネを使って、これにLXDEパッケージをインストールする。LXDEのパッケージはubuntu-xenial-universeにあるが、デフォルト設定ではアクセス不能。リポジトリのデータベースの更新が必要。

ところが、リポジトリの更新を行うとデータベースが壊れて、大半のアプリがパケマネに表示されなくなってしまう事がある。原因は不明だが「/root/.Packages」を確認すると、Packages-ubuntu-xenial-universeが空になっていたり、正常に読めなくなっていたりした。このファイルは;

http://archive.ubuntu.com/ubuntu/dists/xenial/universe/binary-i386/Packages.xz
をダウンロード&展開して得られるものだが、パッケージのデータベースとしてはかなり大きなファイルである為(展開直後は40MB)、セーブファイルの空き容量が小さいと展開に失敗するのかも知れない。現時点では《十分な空き容量を確保した状態でリポジトリを更新する》しか対策が思い付かない。なお、展開に失敗しても、パケマネは更新成功のメッセージを表示するので厄介。

物は試しと、Package.xzをDebianで解凍して使用してみたが、正常認識してくれなかった。

基本的な起動と終了

インストールが成功したら、ターミナルを開いて、コマンドラインから「startlxde」を打ち込んで、LXDE環境を起動させてみる。この際、「No session for pid xxxx」というエラーメッセージが表示されることがあるが、エラー内容は無視してOKボタンをクリックすれば良い。

システム起動時に画面が真っ黒な状態になることもあるが、その場合はマウスで適当にクリックすればよい。上記のエラーメッセージが表示される。

これでLXDE(OpenBox)のデスクトップが立ち上がるが、デスクトップは真っ黒で、画面下に黒いLXPanelが表示されているだけと、殺風景この上ない。パネルからアプリケーション・メニューを表示して見ると、各カテゴリはスカスカで[その他]にずらっと主要アプリが並んでいる。おいおい、ってんで環境整備を始めたくなるが、まだ時期尚早。ここで弄っても徒労に終わる可能性が高いので、とりあえず、いったんLXDE環境を終ることにする。

と言っても、この段階では終了プロラムもまともに機能しない。なので、Ctrl+Alt+BackSpace(VirtualBoxならばHost+BackSpace)でXを終了してコマンドラインに抜ける。ここで「startx」とすれば、JWMでXを再起動できる。あるいは、「poweroff」/「reboot」でシステムを終了/再起動することも可能。

LXDE環境での起動

以上の手順では、まずJWMで起動してから手作業でLXDEに切り替えているわけだが、それも面倒なので、初めからLXDE環境でデスクトップを起動できるようにする。「/etc/windowmanager」の中身を「jwm」から「startlxde」に書き換えるだけでよい。これで再起動を掛ければ、今度はLXDEのデスクトップで起動する。

「lxde」ではなく「startlxde」とするのは不思議な感じがするが、.xwinitrcの中で/etc/windowmanagerの中身を$CURRENTWMに読み込み、処理の分岐の際に参照しているため。後述のように.xinitrc内の分岐処理を削除すると、この設定はほとんど意味をなさなくなる…のか?

と言っても、いきなりLXDEのデスクトップが起動するわけではなく、いったんJWM(と言うかROXピンボード?)を起動してから、自動的にLXDEに切り替えている。このあたりがLXDEの起動プロセスの特徴で、後でちょっと厄介な問題になる。

必須ツールのインストールとアプリケーション・メニューの変更

このあと、実用レベルのシステムを構築するために設定を変更していくわけだが、その前に揃えておかないといけないツールがある。

@[LXSessionのデフォルトのアプリケーション](lxsession-default-apps)
 自動起動プログラムの設定なども管理している。システム設定には必須のツール。

A[Openbox Configuration Manager](obconf)
 主にウィンドウの外観の変更する。ClearLooks系などに変更しておくことを推奨。

Bアプリケーション・メニュー設定ファイル(/etc/xdg/menus/lxde-applications.menu)
 LxPupTahrからコピーして、少し手を加えて使用する【編集したメニューファイル】。

なお、@とAはパケマネからインストール可能。また、Bのメニューファイルの詳細に関しては【別項参照】。このメニューファイルを使えば、アプリケーション・メニューが適切に分類される。見た目だけではなく、アプリケーション・ランチャーの機能にも影響がある重要な設定。

.xinitrcの変更

LXDEを起動する「startlxde」は「/root/.xinitrc」から呼び出されるが、この.xinitrcの中では各種のシステム設定も行われている。でもって、この設定が問題をややこしくしている元凶なので、いっそ、これらの設定を無視して、.xinitrcを以下の1行だけにしてしまう(元の.xinitrcも適当にリネームして保存しておくこと:後でscimの起動などで使用するので)。
exec startlxde
ちなみに、元の.xinitrcではどのようなトラブルが発生するのかと言うと;

@LXDEが起動する前にJWMが起動する(自動的にLXDEに切り替わる形式になる)
ALXDEの設定ファイルが正常に参照されない(一般的でない場所を参照している?)
B自動起動プログラムが正常に起動しない(一部のみ起動したり、二重起動したりと不安定)

.xinitrcを上記の1行のみに変更すると、これらの問題が解決する。尤も、この段階ではBの自動起動プログラムは「一切起動しない」になってしまうが−−それが正常な状態。@もトラブルと言うより流儀の問題ではあるが…。ともあれ、これで本格的な設定変更の準備が整った。

なお、LXDEのブートシーケンスは以下のようになっている(赤字はバイナリ・ファイル);

xwin(=startx) → xini → .xinitrc → startlxde → lxsession → autostart

設定上の問題が発生したら、この順番で辿っていくのが良いかと。

終了プログラムの変更

このLXDE環境ではログアウトが正常に機能しない。アプリケーション・メニューの[ログアウト]は未登録で使用不可、「/usr/share/applications」の[Leave Puppy](logout_gui)もLXDEでは正常動作しない。LXDE環境でログアウトをするには[lxsession-logout]をインストールするらしいが、これはログアウト(所謂「ログアウト」ではなくシステムの終了)とスクリーンロックしかできないようで、使い勝手が良くない。むしろ、LxPupTahrの「/usr/bin」から以下のプロラムを持ってくる方が良いだろう。

lxp-shutdown ログアウト・プログラム本体(フレーム)

lx-wmpoweroff システムの終了
lx-wmreboot システムの再起動
lx-wmrestart ウィンドウマネージャのリスタート
lx-wmexit Xを終了してコマンドラインに降りる
lx-wmsleep スリープ

以上のプログラムをコピーした上で、「/root/.config/lxpanel/LXDE/config」に以下のような行を追加する。これで、アプリケーション・メニューの末尾の[ログアウト]が有効になる。

[Command]
Logout=lxp-shutdown
なお、この環境ではログアウト・ダイアログの[キャンセル]項目のアイコンが欠落しているので、lxp-shutdownをテキスト・エディタで開いて、アイコン設定を以下のように変更するとよい(赤字の箇所を変更している)。
<button width-request=\"150\">
<label>$(gettext 'Cancel')</label>
<input file>/usr/share/icons/nuoveXT2/48x48/actions/gtk-close.png</input>
<action type=\"exit\">Exit</action>
</button>

.xinitrcを前記のように変更しないと、ここでの設定は有効にならない。元の.xinitrcでは参照する設定ファイルが異なるようだ(/root/.config/lxpanel/default/config?)。

自動起動プログラムの設定(1)−−基本事項と留意点

まずは、基本的な事項を抑えておくと; で、更に留意すべき点としては; 何ともややこしい…と言うか、未だにLxPupの自動起動プログラムのプロセスの意図を理解できないでいる。「/root/.config/autostart」の削除・復元に関しては、恐らく、デスクトップ環境を変更する際に、自動起動するプログラムを切り替えるための処理だろうが、なんでこんな方法を取るのか…?タイミングに依存してしまう手法は避けるべきではないかと…実際、意図しない動作になることが多いわけで…

当初は、.xinitrcをオリジナルのまま使用し、LxPupTahuからz-lxde-startup.shをコピーして使用していた。原理的には、これで自動起動プログラムが有効になるはずなのだが、上記および下記のようにトラブルが頻発したため、方針を変更した。

autostartにプログラムをコピーしておきながら、わざわざz-lxde-startup.shスクリプトで1つ1つのプログラムの起動をしているのだから、二重起動する方がむしろ正常。と言うことは、LXDE起動時にautostartへのコピーが間に合わないことが前提なのか?しかも、スクリプトでの起動もタイミングが間に合わないことが多いようだ。仕方ないので、ループにsleep 0.5を挟んでタイミング調整をしたら上手く行くようになったが、それも変だろう…何か見落としている?

自動起動プログラムの設定(2)−−自動起動処理のシンプル化

と言うことで、本システムではこうした小細工はすべて切り捨てることにする。すなわち、環境はLXDE固定で「/root/.config/autostart」とその中身は恒常的に存在し、LXDE起動時に確実に1度のみ起動するようにする。また、JWMを経由しないので「/root/Startup」の中身は無視される。

@「/root/.config/autostart」フォルダを新規作成して(多分消えていると思うので)、「/root/.config/lx-autostart」の中身を全部コピーする。

A「/usr/bin/lx-wm*」をテキストエディタで開いてautostartディレクトリ削除コマンドをコメントアウトする。以下はlx-wmreboot(システムの再起動)の例。赤字の「#」の部分を追加した。他の終了プログラムも同様にする(lx-wmsleepは除く)。

#!/bin/sh
yaf-splash -placement top -bg cyan -fg black -timeout 10 -text "Rebooting...." &
rsync -r --del $XDG_CONFIG_HOME/autostart/ $XDG_CONFIG_HOME/lx-autostart/
#rm -rf $XDG_CONFIG_HOME/autostart
rm /root/.cache/menus/*
wmreboot
killall lxsession &

以上でシステムを再起動すれば、スンナリ奇麗に自動実行プログラムが起動する。もう、これでいいんじゃないか?ま、XenialpupやLxPupTahrの.xinitrcで何をゴチャゴチャやっているのか、確認しておく必要はあるだろうが…

ちなみに、「/usr/Startup/z-lxde-startup.sh」の中にも、autostartの削除/復元プロセスが書き込まれているが、この.xinitrcではStartupの自動起動は無効になるので関係ない。

自動起動プログラムやサービスの設定は[パピーの設定|スタートアップマネージャ](/usr/sbin/wmstartups)でも可。ただし、LXDE環境との整合性は未検証(どこの情報をリストアップしているのか?)。実体はシェルスクリプトなので読めばわかるか?

【注意】[/root/.config/autostart]は[*.desktop]ファイルのみ有効([/usr/share/applications]の中のプログラムアイコン)。シェルスクリプトの類を入れておいても実行されない。スクリプト類は[*.desktop]ファイルを作成してから登録するか、後述の[/root/.config/lxsession/LXDE/autostart]に追加する。

日本語入力SCIM/Anthyの登録

現状では日本語入力ができない状態だが、.xinitrcの中身を変更すれば簡単に復元できる。オリジナルのXenialpup-7.5日本語シンプル版の.xinitrcからscimに関する部分をコピーすればよい。
# fixmenus when locale is changed
[ -x /usr/local/bin/fixmenus_on_locale ] && /usr/local/bin/fixmenus_on_locale
# Inserted by the post-install scrpt of scim-1.4.7-*.pet
# Enable legacy X applications to use scim:
# Make sure your environment variable LANG is '*.UTF-8', not '*.utf8'
# LANG maybe set at /etc/profile
if [ -x /usr/bin/scim ] && echo $LANG| grep -qi '.utf'; then
  export XMODIFIERS='@im=SCIM'
  export GTK_IM_MODULE='scim'
  export QT_IM_MODULE='scim'
  export LC_CTYPE=$LANG
  [ -x /usr/bin/scim-bridge ] && export GTK_IM_MODULE='scim-bridge'
  ls /tmp/scim-helper-manager-socket* &>/dev/null || /usr/bin/scim -d
fi

exec startlxde

エラーメッセージの抑止

以上で基本的な設定は終了。最後に残ったのは、起動時に表示されるエラーのメッセージのボックス。これが実に厄介。このエラー表示はLXDEの有名なバグで、エラーの発生源はlxpolkitらしい。これについては【@z80oolong(Z.OOL.)様の記事】などを参照。

ただし、本システムにはlxpolkitはインストールされていない(polkitとして指定だけはされているようだが)。したがって、lxpolkitが実行されることはないはずで、実行を止めるという対処法は意味がない。しかし、そうなると何が原因なのか?

正直、未だに原因の究明はできていない。しかし、対処法だけは判った。「/usr/bin/lxsession」をLxPupTahrのものと差し替えれば良い………おいおい、LXDEの中核バイナリの差し替えかよ!? スクリプトや設定ファイルならともかく、バイナリを差し替えちゃって大丈夫なのか?ライブラリとかと不整合が起きないのか?−−と言う気もするが、当面のところは問題なく稼動している。究極の弥縫策ではあるが、今は他に有効な代替策がない。

各種設定の変更

壁紙(背景):まずは真っ黒画面の変更から。デスクトップを右クリックするか、メニューから[デスクトップの設定]を起動して変更する。とりあえず[default.png]あたりに。私は「/usr/share/lxde/wallpapers/lxde_blue.jpg」を使用している(LxPupからのコピーだったかな?)。

画像ビューアの壁紙設定機能は無効になっているので注意(ピンボード設定が欠落?)。使用する壁紙は/usr/share/backgroundsにコピーすることを推奨。

デスクトップのアイコンサイズとアイコン名のフォント:デスクトップのアイコンのサイズはPCManFMの設定ダイアログの[大きなアイコンのサイズ]で指定する。タイトルのフォントはデスクトップを右クリックして[デスクトップの設定]で指定する。

デスクトップにアイコンを配置するときは、/usr/share/applicationsの中のアイコンをコピペすることを推奨。標準的な[デスクトップに追加]ではリンクになるので、ちょっと見苦しい。

デスクトップ・テーマ:[OpenBox Configuration Manager]または[ルックアアンドフィールを設定します]で変更する。ClearLooks-3.4等を推奨;テーマの細部の変更については【別項参照】。現行の設定の変更ならば「/root/.config/openbox/lxde-rc.xml」を編集する。

個人的にはSyscrashをベースに配色を青系に変更して使用している。理由は、Syscrashのみボタンサイズが大きいから(原因不明:独自ボタン画像を使用しているからではないようだ)。

ウィンドウのタイトルバーのはみ出し抑止:【別項参照】

アプリケーション・ランチャー(lxpanel):メニュー構造の変更によって登録されていたアプリが起動不可能になることがある。その場合はいったん登録を削除して再度登録し直す。

各種のデフォルト・アプリケーション:基本的に[LXSessionのデフォルトのアプリケーション]を用いるが、これでは設定が反映されないことも。「/usr/local/bin」にある[default〜]の中身を書き換えるべきか?

ターミナルの表示設定:流石に黒地に青の表示(ディレクトリ)は見にくいので、白地に黒に変更。そうすると、今度はシアンやイエローが見にくくなるので「/root/.bashrc」に下記のような設定を追加。ついでに、プロンプトにカレントの表示を設定。エイリアスでDIRコマンドも追加。

LS_COLORS='ex=31:ow=01;07;34'
PS1="\[\e]2;\w\a\e[32m\]$USER\\$\w>\[\e[0m\]"
alias dir='ls -o --group-directories-first --time-style="+%y-%m-%d %T" --file-type'

自動起動プログラムの追加:「/root/.config/lxsession/LXDE/autostart」に実行したいプログラムを追加。以下の例では、緑色の行で「lan-mount-pnet.sh」という自作シェルスクリプトを自動実行させている。[LXSessionのデフォルトのアプリケーション]でも設定可。

@lxpanel --profile LXDE
@pcmanfm --desktop --profile LXDE
@xscreensaver -no-splash
/root/lan-maout-pnet.sh

頭に「@」の付いている3行はデフォルトで設定されているもの。なお、「@」はクラッシュした場合も再起動を試みる指定らしい。

[ゴミ箱]ディレクトリをブックマーク:[ゴミ箱へ移動]したファイルは「/root/.local/share/Trash」に送られる。このディレクトリをPCManFMでブックマークしておけば[ゴミ箱]として利用可能。ディスク上から完全に削除するときはメニューから[編集|削除]を選ぶ。

アプリケーションのインストール

Seamonkey(+NoScript):2.49.1のsfsを使用。PaleMoonもNoScriptが機能するので使い勝手は悪くないのだが、Yahoo!にログインできないのが致命的(当然ヤフオクも不可)。また、NoScriptを酷く嫌っているようで…気持ちは判るが、他にホワイトリスト式のものもないので…

本システムではJavaScriptの制限が必須。想定しているのがPAE非対応の骨董マシンなので、JavaScriptを有効にするとブラウザが固まって使い物にならない。さりとて、全面禁止にすると殆ど何もできない。《基本的に禁止・例外的に許可》というホワイトリスト式が必要。

SMPlayer(+MPlayer):パケマネからインストール。非力なマシンではmpvではなくMPlayerを推奨。また、ビデオ出力ドライバーは[gl]を指定する;[default]では画面が乱れる。

FreeFont(fonts-freefont-ttf_20120503-4):FreeSansなどが含まれている。OpenType版もあり。日本語の記号(●□等)がまともな大きさで表示される貴重なフォント(^^;−−と思ったが、Xenialpupでは、他のフォントでもまともなサイズで表示できるようだ。

総括

まだまだシステムとして不整合な部分を大量に残しているが、とにかく日常業務がこなせるレベルにはなっていると思う。試用段階レベルではあるが、lxsessionを差し替えたからと言って、特にシステムが不安定化しているという実感もない。骨格しかない分、キレが良い印象。とりあえず、次はゴミ箱が正常に使用できるようにしてみましょうか…先は長い。

 備忘録
/usr/bin/lxsessionLXDE実行プログラム本体(バイナリ)
/usr/bin/startlxdeLXDE環境を起動するシェルスクリプト、各種設定ファイルの場所を指定した上でlxsessionを呼び出している

/usr/bin/xinitX-Window実行プログラム本体(バイナリ)
/usr/bin/xwinX-Windwoを起動するシェルスクリプト、環境設定を行った上でxinitを呼び出す;Xの起動時の問題はこことstartlxdeおよび.xinitrcを参照
/usr/bin/startxxwinの別名(シンボリックリンク)
/root/.xinircX起動時に自動実行される;キーボード/マウスの設定、SCIMの起動、LXDE/JWMの起動などが指定されている

Menu|System|Pup-SysInfo|Sys-Specs|Distro SpecsOpenBoxなどのバージョン情報

/etc/windowmanager元の.xinitrcを使用するなら「jwm」か「startlxde」。本システムでは「lxde」で良い
/usr/bin/lxp-shutdownLxPup用の終了プログラム;lx-wmreboot等を呼び出す
/root/.config/lxpanel/LXDE/configメニューに終了プログラムを登録(Logout=lxp-shutdown)


【Linuxなんて大キライ目次】 【ホーム】