†Linuxなんて大キライ†
作成開始日 2023.06.18
最終更新日
XenialPup-7.5は、Pentium Mなどの非PAE環境でも動作する、恐らく最後のPuppy Linux。骨董品のノートPCなどには貴重なバージョンなのだが、やはりデフォルトのJWM/ROX環境では実用は厳しい。こういう時にはLxPupが頼りになるのだが、なぜか、LxPupXenialはウチの環境では起動しない。そこで、とりあえず、UI周りだけでもLXDE化しようと、PCManFM、LXPanel、LXTerminalをインストールしてみた。これについては【別項参照】。
が、やはり、擬似環境は擬似環境で、きちんとしたLXDE環境には及ばない。そこで、自力でXenialpupのLXDE化ができないか、挑戦してみた。ちなみに、パケマネからUbuntuのLXDEパッケージをインストールできるので、その意味ではLXDE化は簡単と言えるのだが、まともに使えるかどうかは全く別問題。実用的な環境を作るためには、相当な設定変更が必要だった。また、未だに「network:///」などは未サポート状態。
と言うことで、現時点までのLXDE化作業をまとめておく。なお、「自力でLXDE化」と言っても、LxPupの成果を借用している部分が非常に多い。「外して・はめて・上手く行った」の域を超えるものではない。技術的な素地に基づかない、単なる試行錯誤の結果である。
ところが、リポジトリの更新を行うとデータベースが壊れて、大半のアプリがパケマネに表示されなくなってしまう事がある。原因は不明だが「/root/.Packages」を確認すると、Packages-ubuntu-xenial-universeが空になっていたり、正常に読めなくなっていたりした。このファイルは;
http://archive.ubuntu.com/ubuntu/dists/xenial/universe/binary-i386/Packages.xzをダウンロード&展開して得られるものだが、パッケージのデータベースとしてはかなり大きなファイルである為(展開直後は40MB)、セーブファイルの空き容量が小さいと展開に失敗するのかも知れない。現時点では《十分な空き容量を確保した状態でリポジトリを更新する》しか対策が思い付かない。なお、展開に失敗しても、パケマネは更新成功のメッセージを表示するので厄介。
物は試しと、Package.xzをDebianで解凍して使用してみたが、正常認識してくれなかった。
システム起動時に画面が真っ黒な状態になることもあるが、その場合はマウスで適当にクリックすればよい。上記のエラーメッセージが表示される。
これでLXDE(OpenBox)のデスクトップが立ち上がるが、デスクトップは真っ黒で、画面下に黒いLXPanelが表示されているだけと、殺風景この上ない。パネルからアプリケーション・メニューを表示して見ると、各カテゴリはスカスカで[その他]にずらっと主要アプリが並んでいる。おいおい、ってんで環境整備を始めたくなるが、まだ時期尚早。ここで弄っても徒労に終わる可能性が高いので、とりあえず、いったんLXDE環境を終ることにする。
と言っても、この段階では終了プロラムもまともに機能しない。なので、Ctrl+Alt+BackSpace(VirtualBoxならばHost+BackSpace)でXを終了してコマンドラインに抜ける。ここで「startx」とすれば、JWMでXを再起動できる。あるいは、「poweroff」/「reboot」でシステムを終了/再起動することも可能。
「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のメニューファイルの詳細に関しては【別項参照】。このメニューファイルを使えば、アプリケーション・メニューが適切に分類される。見た目だけではなく、アプリケーション・ランチャーの機能にも影響がある重要な設定。
exec startlxdeちなみに、元の.xinitrcではどのようなトラブルが発生するのかと言うと;
@LXDEが起動する前にJWMが起動する(自動的にLXDEに切り替わる形式になる)
ALXDEの設定ファイルが正常に参照されない(一般的でない場所を参照している?)
B自動起動プログラムが正常に起動しない(一部のみ起動したり、二重起動したりと不安定)
.xinitrcを上記の1行のみに変更すると、これらの問題が解決する。尤も、この段階ではBの自動起動プログラムは「一切起動しない」になってしまうが−−それが正常な状態。@もトラブルと言うより流儀の問題ではあるが…。ともあれ、これで本格的な設定変更の準備が整った。
なお、LXDEのブートシーケンスは以下のようになっている(赤字はバイナリ・ファイル);
xwin(=startx) →
設定上の問題が発生したら、この順番で辿っていくのが良いかと。
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?)。
当初は、.xinitrcをオリジナルのまま使用し、LxPupTahuからz-lxde-startup.shをコピーして使用していた。原理的には、これで自動起動プログラムが有効になるはずなのだが、上記および下記のようにトラブルが頻発したため、方針を変更した。
autostartにプログラムをコピーしておきながら、わざわざz-lxde-startup.shスクリプトで1つ1つのプログラムの起動をしているのだから、二重起動する方がむしろ正常。と言うことは、LXDE起動時にautostartへのコピーが間に合わないことが前提なのか?しかも、スクリプトでの起動もタイミングが間に合わないことが多いようだ。仕方ないので、ループにsleep 0.5を挟んでタイミング調整をしたら上手く行くようになったが、それも変だろう…何か見落としている?
@「/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]に追加する。
# 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
ただし、本システムにはlxpolkitはインストールされていない(polkitとして指定だけはされているようだが)。したがって、lxpolkitが実行されることはないはずで、実行を止めるという対処法は意味がない。しかし、そうなると何が原因なのか?
正直、未だに原因の究明はできていない。しかし、対処法だけは判った。「/usr/bin/lxsession」をLxPupTahrのものと差し替えれば良い………おいおい、LXDEの中核バイナリの差し替えかよ!? スクリプトや設定ファイルならともかく、バイナリを差し替えちゃって大丈夫なのか?ライブラリとかと不整合が起きないのか?−−と言う気もするが、当面のところは問題なく稼動している。究極の弥縫策ではあるが、今は他に有効な代替策がない。
画像ビューアの壁紙設定機能は無効になっているので注意(ピンボード設定が欠落?)。使用する壁紙は/usr/share/backgroundsにコピーすることを推奨。
デスクトップにアイコンを配置するときは、/usr/share/applicationsの中のアイコンをコピペすることを推奨。標準的な[デスクトップに追加]ではリンクになるので、ちょっと見苦しい。
個人的にはSyscrashをベースに配色を青系に変更して使用している。理由は、Syscrashのみボタンサイズが大きいから(原因不明:独自ボタン画像を使用しているからではないようだ)。
頭に「@」の付いている3行はデフォルトで設定されているもの。なお、「@」はクラッシュした場合も再起動を試みる指定らしい。
【追記】gvfs(仮想ファイルシステム)をインストールしてシステムをリブートすれば、[ゴミ箱](trash:///)が有効になる。デスクトップ上にも[ゴミ箱]アイコンが表示される。
本システムではJavaScriptの制限が必須。想定しているのがPAE非対応の骨董マシンなので、JavaScriptを有効にするとブラウザが固まって使い物にならない。さりとて、全面禁止にすると殆ど何もできない。《基本的に禁止・例外的に許可》というホワイトリスト式が必要。
まだまだシステムとして不整合な部分を大量に残しているが、とにかく日常業務がこなせるレベルにはなっていると思う。試用段階レベルではあるが、lxsessionを差し替えたからと言って、特にシステムが不安定化しているという実感もない。骨格しかない分、キレが良い印象。後は「network:///」が有効になれば概ね完成なのだが、[pnethood]があれば特に必要ないかな…
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'
@lxpanel --profile LXDE
@pcmanfm --desktop --profile LXDE
@xscreensaver -no-splash
なお、ネットワーク(network:///)の方はgvfsに加えてgvfs-backendsをインストールすれば良いはずなのだが、この環境では上手く機能しない−−どころか、PCManFMが起動不可能になる。何等かのコンフリクトが起きている模様。
アプリケーションのインストール
総括
/usr/bin/ lxsession LXDE実行プログラム本体(バイナリ)
/usr/bin/ startlxde LXDE環境を起動するシェルスクリプト、各種設定ファイルの場所を指定した上でlxsessionを呼び出している
/usr/bin/ xinit X-Window実行プログラム本体(バイナリ)
/usr/bin/ xwin X-Windwoを起動するシェルスクリプト、環境設定を行った上でxinitを呼び出す;Xの起動時の問題はこことstartlxdeおよび.xinitrcを参照
/usr/bin/ startx xwinの別名(シンボリックリンク)
/root/ .xinirc X起動時に自動実行される;キーボード/マウスの設定、SCIMの起動、LXDE/JWMの起動などが指定されている
Menu|System|Pup-SysInfo|Sys-Specs|Distro Specs OpenBoxなどのバージョン情報
/etc/windowmanager 元の.xinitrcを使用するなら「jwm」か「startlxde」。本システムでは「lxde」で良い
/usr/bin/lxp-shutdown LxPup用の終了プログラム;lx-wmreboot等を呼び出す
/root/.config/lxpanel/LXDE/config メニューに終了プログラムを登録(Logout=lxp-shutdown)
【Linuxなんて大キライ目次】
【ホーム】