ウィンドウが問答無用でデスクトップ中央で開く話
長文注意! 13129文字あります(^。^;
その日の相談は、拍子抜けするほど地味なところから始まった。
パラドックス氏は自作ランチャーアプリ「Zlaunch(ゼットランチャー)」の生みの親で、常用OSをZorinOSからKubuntu(クブントゥ)に切り替えたばかりだった。移行そのものは順調で、Zlaunchも問題なく引っ越しできていた。
ただ一つ、心残りがあった。ランチャー起動時に必ず中央になるという不具合(!?)

「ZorinOS時代、Wayland(画面サーバー)の仕様のせいでウィンドウの位置を記憶する機能が実現できないとClaudeに宣告されて諦めてたんだったよね。座標を読み取ろうとしてもself.x()やself.y()が正しい値を返してくれなくて」
これは以前の相談で私(相談員)自身が説明したことだった。Waylandはセキュリティ設計上、アプリケーションが自分のウィンドウの絶対座標を取得する標準的な手段を持たない。
これは長年、Wayland環境で開発するアプリ作者を悩ませてきた既知の制約であり、Kubuntuに変えたところで、Waylandセッションである限り事情は変わらないはずだった。
「散々聞いてたのでそれは諦める」とパラドックス氏はあっさり引いた。ところが、すぐに次の提案が飛んできた。
「その代わり、常にデスクトップ右下に固定する機能くらいは付けれるよね。ずっと右下しか使ってないから」
一見、これは位置の「記憶」ではなく「固定」なので、話がシンプルになるはずだった。読み取りではなく、書き込み(self.move())だけで完結する。しかも起動時のmove()は、Wayland環境でも比較的通りやすいという報告がある——そう私は説明し、実装に取りかかった。
この時点では、まさかこれが長い迷宮巡りの入り口になるとは、双方とも思っていなかった。

第一関門:そもそもファイルが見つからない
設定に「常にデスクトップ右下に表示する」チェックボックスを追加し、config_manager.pyにフラグを、Zlaunch.pyに位置計算ロジックを実装する——という3ファイル構成の変更案を渡し、パラドックス氏が適用作業に取りかかった。
翌日、届いたのはこんな悲鳴だった。
ModuleNotFoundError: No module named 'settings_dialog'
慌てて原因を洗いにかかったが、これは拍子抜けするほど単純な話だった。パラドックス氏には「編集前にファイルをリネームしてバックアップする」という日頃の習慣がある。今回もその通りにsettings_dialog.pyをsettings_dialog203.pyにリネームしてから作業していたのだが、修正が終わった後、リネームしたことをすっかり忘れてそのまま放置していたのである。
ls -laで確認してもらうと、案の定settings_dialog203.pyだけが残り、肝心のsettings_dialog.pyが存在しない状態になっていた。ファイル名を正しく戻すだけで、この関門はあっさり突破。パラドックス氏は「一発OKとはスゴイ>自分(´∀`)」と自画自賛していたが、正確には「一度盛大に躓いてから一発OK」だった。
第二関門:デバッグ出力が出てこない
ファイル名問題を片付けて起動し直したところ、今度もウィンドウが中央に出た。右下固定が機能していない。
原因を切り分けるため、_apply_window_position()メソッドの先頭にprint文を仕込んでもらい、ターミナルから実行してもらうことにした。
ところが——。
hikosama@hikosama-optiplex7090:~$ python3 /home/hikosama/appli/Zlaunch/Zlaunch.py
hikosama@hikosama-optiplex7090:~$
何も出てこない。print文が実際にファイルに存在することはgrepで確認済みなのに、実行しても一切出力されない。これは奇妙だった。
まず疑ったのは出力バッファリングだった。Pythonの標準出力は、ターミナルに直結していない場合などにバッファリングされ、プロセスが終了するかバッファが一杯になるまで表示が遅延することがある。しかし、それだけでは「一行も出ない」ことの説明として弱い。
そこでps aux | grep Zlaunchでプロセス一覧を確認してもらったところ、思わぬ事実が発覚した。すでに古いZlaunchプロセスがバックグラウンドで生き残っていたのである。
Zlaunchには単一インスタンス機構が組み込まれており、Unixドメインソケット(/tmp/zlaunch.sock)を使って「起動中の別プロセスがいれば、そちらにトグル通知を送るだけで自分は即終了する」という仕組みになっている。つまり、ターミナルからpython3 Zlaunch.pyを実行しても、既存プロセスが生きていればZlaunchWindowのコンストラクタ自体が一度も呼ばれず、当然_apply_window_position()もprintも実行されない。ウィンドウが表示されたように見えたのは、既存プロセスが「トグル通知」を受けて表示状態を切り替えていただけだった。
pkill -f Zlaunch.pyとrm -f /tmp/zlaunch.sockで古いプロセスとソケットを掃除し、改めて実行してもらったが、それでもまだprintが出ない。
ここでようやく本命のバッファリング問題にたどり着いた。python3 -u(unbuffered)オプションを付けて実行してもらったところ——。
DEBUG 計算した移動先: 1695 965
DEBUG 画面ジオメトリ: PySide6.QtCore.QRect(0, 0, 2560, 1440)
DEBUG self.width/height: 860 470
ついに出力が得られた。しかも計算結果は完璧だった。画面サイズ2560×1440、ウィンドウサイズ860×470から逆算した右下の座標(1695, 965)は、マージン込みでほぼ正確な値になっている。self.move(1695, 965)は間違いなく呼ばれている。
——にもかかわらず、実際のウィンドウは中央に表示され続けていた。
Waylandを疑い、そして誤って断罪する
計算は合っている。呼び出しも正しい位置にある。なのに反映されない。ここで私が導いた結論はこうだった。
「これは以前お伝えしたWaylandの制約そのものです。座標の“読み取り”がダメだったのと同じ理由で、“書き込み”であるmove()もコンポジタに無視されている可能性が高いです」
一応の代替案として、ウィンドウがアクティブになったタイミングでmove()を再試行するchangeEvent()のオーバーライドも提案した。
def changeEvent(self, event):
from PySide6.QtCore import QEvent
if event.type() == QEvent.Type.ActivationChange:
if self.isActiveWindow():
self._apply_window_position()
super().changeEvent(event)
結果はダメだった。パラドックス氏はここで、私の説明に静かな違和感を口にした。
「どうしても理解できないのだが、エディタやファイラーなど他のソフトはウィンドウの位置を記憶してるのに、Pythonアプリだとダメなんておかしいやろ(。-`ω´-)」
もっともな指摘だった。もしWaylandの仕様レベルでmove()が一律に無視されるなら、KateもDolphinも同じ目に遭うはずである。そして、パラドックス氏は自分の手で確かめに行った。
「憤って、ひととおり開き直してみたら、たしかに全部中央で開いてるわ。なんやこれ。でもウィジェットは例外で自由配置起動出来てる!?」
この一言で、潮目が変わった。
「全部中央」という決定的な手がかり
もしZlaunchだけが中央に出るなら「Zlaunchの実装の問題」を疑うべきだし、Waylandそのものが原因なら「ネイティブWaylandアプリすべて」が影響を受けるはずだが、X11由来の互換レイヤーを経由するアプリは影響を受けない可能性がある。ところがパラドックス氏の報告は
「普通のアプリは種類を問わず全部中央、デスクトップウィジェットだけが例外」
というものだった。
これはWaylandプロトコルの制約というより、もっと上のレイヤーで何かが一律に介入していることを示すパターンだった。私は方針を切り替え、KDE Plasma(KWin)側の設定を疑って調べ直した。
出てきたのは、拍子抜けするほど身も蓋もない答えだった。KWinには新規ウィンドウの配置方法を選ぶ設定項目があり、Plasma 6ではデフォルトが「Centered(中央)」に変更されている、という情報が見つかったのである。普通のウィンドウは全てKWinの配置ポリシーに従うため、アプリがどんな座標をmove()で指定しようと、この設定が優先されて問答無用で中央に出る。一方、デスクトップウィジェット(プラズモイド)はKWinの管理下になく、plasmashellが別ルートで位置を管理しているため、この制約を受けない——という説明なら、「全部中央、ウィジェットだけ自由」という観察と綺麗に一致する。
パラドックス氏に確認してもらうと、案の定「システム設定 → ウィンドウの管理 → ウィンドウの挙動 → 詳細設定」タブに、こんな項目があった。
- ウィンドウの配置(P): 中央に
見た瞬間、こちらの気が抜けた音が聞こえた気がした。
犯人はWaylandではなく、ごく普通のGUI設定だったのである。

解決、そして分かりにくさへの抗議
「中央に」を「最小限の重なり」に変更して適用し、Zlaunchを起動し直してもらうと——。
「できた!!ドンピシャだった。Wayland関係なしやんけ!!」
画面右下に、Zlaunchのウィンドウがぴったり収まっていた。設定を一つ変えるだけで解決する話に、ここまで遠回りしてしまったことになる。パラドックス氏の総括は手厳しくも的確だった。
「それにしても何と分かりにくい表現や。X11にはしたくないので良かったよ。結果オーライや。今回もボクの粘り勝ちだね」
反論の余地はなかった。
なぜZorinOSではウィンドウの配置設定を見た記憶がないのか
解決後、パラドックス氏からもっともな疑問が出た。
「ZorinOSにこんな設定項目をみた記憶がない。KDEだから設定がある?」
その通りである。今回の「ウィンドウの配置」はKDE Plasma(KWin)特有の設定項目で、ZorinOSの標準デスクトップであるGNOME(グノーム/Mutter)には、同等のGUI設定が存在しない。
GNOMEは「設定項目を増やしすぎない」という設計思想が強く、ウィンドウ配置ポリシーのような細かい挙動はそもそも標準の設定画面に出てこないことが多い。対してKDE Plasmaは伝統的に「とにかく細かく設定できる」ことを美徳としてきたデスクトップ環境で、今回のような挙動もGUIから普通に触れるようになっている。
ZorinOSからKubuntuへの移行は、単なるディストリビューションの乗り換えではなく、GNOMEからKDEへのデスクトップ環境の乗り換えでもあった。触れる設定項目そのものが増えたことで、今まで気にする必要のなかった沼に足を踏み入れることになった、というのが今回の教訓の一つである。
相談員のひとりごと
正直に告白しなければならない。今回、私は原因を大きく見誤っていた。
「座標が読み取れない(x()/y())」というWayland固有の制約と、「指定した座標に移動できない(move()が効かない)」という今回の現象を、私は同じ原因だと決めつけてしまった。似た症状に見えても、原因のレイヤーはまったく別だったのである。前者はWaylandプロトコル自体の設計、後者はその上で動くウィンドウマネージャ(KWin)の一設定に過ぎなかった。
もしパラドックス氏が「他のソフトも全部中央やんけ」と気づいて教えてくれなければ、私は最後まで「Wayland環境だから仕方ない」の一点張りで押し通していたと思う。
changeEventの追加提案まで、見当違いの方向への足掻きだった。
技術的な切り分けの手順(モジュールが見つからない→ファイルのリネーム忘れ、printが出ない→既存プロセスの残留とバッファリング、計算は合っているのに反映されない→設定レイヤーの誤認)は、どれも一つ一つは地味な話である。しかし、こうした地味な切り分けを一段ずつ登っていかないと、本当の犯人にはたどり着けない。今回はその典型例だったように思う。
パラドックス氏の「粘り勝ち」宣言に、今回ばかりは全面的に同意するしかない。
今回のポイント(まとめ)
- Wayland環境では、アプリが自分のウィンドウの絶対座標を読み取ることは基本的にできない(既知の制約)
- 一方、起動時に
move()で座標を指定する行為自体はWaylandの仕様が直接妨げているわけではない - KDE Plasma(KWin)には「システム設定 → ウィンドウの管理 → ウィンドウの挙動 → 詳細設定」にウィンドウの配置ポリシーという設定があり、Plasma 6ではデフォルトが「中央に」になっている場合がある
- このポリシーが「中央に」になっていると、アプリ側がどんな座標を指定しても、新規ウィンドウは問答無用で画面中央に出る
- デスクトップウィジェット(プラズモイド)はKWinの管理下になく、
plasmashellが別ルートで位置を管理するため、この制約を受けない - 症状が「特定の1本のアプリだけ」なのか「ほぼ全部のアプリ」なのかを切り分けることが、原因のレイヤーを見極める最大の手がかりになる
- GNOME(ZorinOS)とKDE Plasma(Kubuntu)では、そもそも触れられる設定項目の粒度が違う。乗り換え後は「今まで見たことのない沼」が新たに出現しうる
あとがき補足:解決したはずが、また崩れた話
前回の記事で「右下固定、解決!」と胸を張ったばかりだった。ところが、その後に発生した後日談がある。今回はその顛末を、本編のあとがきを補うつもりで短くまとめておきたい。
発端は、まったく別件の再ログイン
きっかけはZlaunchとは無関係な、ちょっとした小トラブルだった。パラドックス氏が過去記事のMarkdownファイルを開こうとしたところ、Dolphinの「開くアプリを選択」にghostwriter(ゴーストライター/MDエディタ)が候補として出てこない、という問題が起きた。

調べてみると、.desktopファイルもMIMEキャッシュも正しく登録されているのに、肝心のXDG_DATA_DIRSという環境変数にFlatpakアプリ用のディレクトリ(/var/lib/flatpak/exports/share)が含まれていない、という状態だった。原因を作っていたのは/etc/profile.d/flatpak.shというスクリプト自体は正しく存在するのに、それが現在のログインセッションにまだ反映されていなかったこと。対処は単純で、一度ログアウトして入り直せば直る話だった。
実際、再ログインでMarkdownはちゃんと開けるようになった。ここまでは何の問題もない、ただの小さな一件だった。
まさかの巻き添え
ところが、この再ログインの後、Zlaunchを起動してみると――ウィンドウが画面の最上部に出るようになっていた。右下固定のチェックは入ったまま、設定ファイルにもpin_bottom_right: trueは残っている。開き直しても症状は変わらない。

一度は「KWinのウィンドウの配置ポリシーを『中央に』から『最小限の重なり』に変えれば解決する」という結論に達していたはずだった。その設定自体は変わっていないのに、なぜ急に位置がおかしくなったのか。
ここで、もう一つ気になる現象が重なった。ターミナルウィンドウを開くたびに、出現位置が右上になったり右下になったりと安定しない。これは実は無関係な話ではなかった。「最小限の重なり」というポリシーは、文字通り「その時点で画面に開いている他のウィンドウと重ならない場所」を毎回選ぶ動作をする。つまりこの設定は、Zlaunchのmove()要求よりも、画面上の混雑状況を見た判断を優先することがあるということだ。
以前「中央に」から「最小限の重なり」に変えただけで一発解決したように見えたのは、実はその時点でたまたま条件が噛み合っていただけで、根本的にはアプリのmove()要求とKWinの配置ポリシーがせめぎ合った状態のままだった、というのが実情だったらしい。
デバッグ用printを掘り起こす
以前仕込んだデバッグ出力を使って、再度切り分けにかかった。
python3 -u /home/hikosama/appli/Zlaunch/Zlaunch.py
DEBUG 計算した移動先: 1695 965
DEBUG 画面ジオメトリ: PySide6.QtCore.QRect(0, 0, 2560, 1440)
DEBUG self.width/height: 860 470
計算結果は相変わらず完璧だった。move(1695, 965)は間違いなく呼ばれている。にもかかわらず、実際のウィンドウは右上に出る。「ウィンドウが表示された後にもう一度move()を呼び直せば、ポリシー側の初期配置を上書きできるのでは」という案も試してもらったが、これも効果なし。何度move()を呼んでも、KWinの配置ポリシー側が最後に勝ってしまう状態だった。
KWinの「ウィンドウのルール」で個別に黙らせる
ここまで来ると、グローバルな配置ポリシーを操作する方向ではなく、Zlaunchというアプリケーション個別にKWinのルールを強制する方向に切り替えるしかなかった。
KDEには「ウィンドウのルール」という機能があり、特定のアプリケーションに対して、システム全体の設定より優先されるルールを個別に設定できる。設定項目の中には、こんな注意書きがあった。
これはまさに今回のケースそのものだった。Zlaunch自身が起動時に独自のmove()を呼んでいるせいで、ルール側の指定と競合していた、という構図が、この注意書き一つでようやく腑に落ちた。
設定内容は以下の通り。
- 「位置」:適用方法を「強制」にし、座標を
1695, 965に指定 - 「要求されたジオメトリを無視」:適用方法を「強制」にし、値を「はい」に設定

この2つを組み合わせることで、ようやく安定して右下に出るようになった。
落とし穴:ルールの対象が広すぎた
ここで一件落着かと思いきや、パラドックス氏から鋭い指摘が飛んできた。
「アプリケーション固有の設定が効いたわけだけど、説明欄に『python3のアプリケーション設定』となっている。文言とは別に“Zlaunchだけ”に適用となるはずだよね?」
確認してみると、ルールの一致条件になっていた「ウィンドウクラス」の値はpython3.14 python3という、あまりにも汎用的なものだった。PySide6/Qtアプリは、アプリ側で明示的に名前を設定しない限り、起動に使ったインタプリタの名前がそのままウィンドウクラスとして扱われる。つまり今回のルールは、Zlaunchだけでなく「python3で起動されたあらゆるQtアプリ」に一致してしまう可能性がある状態だった。今後、別のPython製GUIツールをpython3で起動すれば、意図せずこの右下固定ルールが横から適用されてしまうリスクを抱えたままだった。
根本的な対処は、Zlaunch自身にきちんとした固有の名前を持たせることだった。
def main():
if single_instance.try_send_toggle_to_running_instance():
return
app = QApplication(sys.argv)
app.setDesktopFileName("Zlaunch") # ウィンドウクラスをZlaunch固有にする
window = ZlaunchWindow()
window.start_toggle_listener()
window.show()
window._apply_window_position()
sys.exit(app.exec())
この一行を追加した上で、KWinのルールを一度削除し、ウィンドウクラスがZlaunch固有の値に変わったことを確認してから作り直す、という手順で決着した。
ついでに見つかったもう一つのズレ:システムコマンド
右下固定の作業と並行して、Zlaunchのシステム機能ボタン(ログオフ)がエラーで動かない、という別件も発覚した。
実行に失敗しました: [Errno 2] そのようなファイルやディレクトリはありません: 'gnome-session-quit'
原因は単純で、コード内のログオフコマンドがZorinOS(GNOME)時代のgnome-session-quitのままだったこと。KDE Plasma環境では別のコマンドが必要になる。調べたところ、Plasma 6では
qdbus6 org.kde.LogoutPrompt /LogoutPrompt org.kde.LogoutPrompt.promptLogout
が動作することを確認できた。ただしこのあたりはPlasmaのバージョンによってコマンド体系が変わってきた経緯があり、環境差の報告も複数見られたため、コードに反映する前に必ずターミナルで手動テストしてから、動作確認が取れたコマンドだけを採用する、という手順を踏んだ。再起動・シャットダウン・サスペンドは元々systemctl(systemdの標準コマンド)を使っていたため、デスクトップ環境が変わっても無修正で動いていた。

今回の教訓
- KWinの「ウィンドウの配置ポリシー」は、初回表示時だけでなく、継続的にアプリの
move()要求と競合しうる。一度直ったように見えても、条件(他に開いているウィンドウの数や位置)次第で再発することがある - 確実にアプリの位置を固定したい場合は、グローバルな配置ポリシーをいじるより、KDEの「ウィンドウのルール」でそのアプリケーション個別に「位置を強制」+「要求されたジオメトリを無視:はい」を設定する方が確実
- PySide6/Qtアプリを
python3 スクリプト名.pyの形で起動していると、ウィンドウクラスがpython3という汎用名になり、個別ルールのつもりが「python3で起動された全アプリ」に広がってしまう危険がある - これを避けるには、
QApplication生成直後にapp.setDesktopFileName("アプリ名")を呼び、アプリ固有の識別名を明示しておく必要がある - デスクトップ環境をまたぐ移植(GNOME→KDEなど)では、
systemctlのようなデスクトップ非依存のコマンドはそのまま動くが、gnome-session-quitのようなDE固有コマンドは個別に洗い替えが必要 - 「自由度の高いシステムほど、隅々まで意図通りに設定する責任も増える」というのは、今回のようなカスタマイズ志向のユーザーにとっては特に効いてくる話だった
「使い勝手にこだわりの強い自分には、けっこう大事な教訓だね」
というパラドックス氏の言葉通り、地味だが実用上は見過ごせない一件だった。
そして最後にもう一段オチがついた
……と、ここまでまとめて綺麗に終わるはずだったのだが、実際にはもう一幕あった。
app.setDesktopFileName("Zlaunch")をコードに追加した直後、パラドックス氏から慌てた報告が届いた。
「あれ??? コード追加したらまた左上固定になったぞ……間違えてないよね(^。^;」
コードは間違っていなかった。むしろ正しく効いた結果だった。ウィンドウクラスがpython3.14 python3からpython3.14 Zlaunchに変わったことで、以前作ったKWinのルール(古いウィンドウクラスを条件にしていたもの)が対象外になり、適用されなくなっていたのである。「壊れた」のではなく「ルールの網から外れた」だけ、というのが実態だった。
対処は単純で、古いルールを削除し、新しいウィンドウクラス(python3.14 Zlaunch)を条件に、同じ内容(位置の強制指定+要求されたジオメトリを無視:はい)でルールを作り直すだけ。これであっさり右下固定は復活し、しかもウィンドウクラスにはちゃんとZlaunchという固有名が含まれるようになった。図らずも、前段で指摘した「python3全般に効いてしまう問題」が実際に解消されたことも、このアクシデントのおかげで確認できた形になる。
もう一点、仕上げの微調整も。ルール画面を確認すると「位置」の適用方法が「起動時に適用」のままだったため、「要求されたジオメトリを無視」と揃えて**「強制」**に変更。これで、起動時だけでなくあらゆるタイミングに対して、位置指定がぶれなく効くようになった。
「あ、もう忘れてる!!」とパラドックス氏が笑っていたが、無理もない。ここまで長丁場だった。位置・サイズ・システムコマンド・ウィンドウクラスの識別、すべてが噛み合って、Zlaunchの右下固定はようやく本当に完結した。
さらなる教訓 by 管理人
個別のウィンドウ管理の詳細設定は、アプリをフォーカスしてショートカットキーの「alt+F3」でメニューを開き、「その他のアクション – アプリケーション固有の設定」から開くという覚えにくい手順。※GUIの場合

こんな操作を最近記憶力の低下が顕著な自分にはたぶん覚えてられないだろうと断定し、ランチャー設定画面を開いてボタン一発で位置固定が出来るように改良できるはず、とClaudeに依頼するとなんだか理屈をつけて難色を示した。
難しい理由
- ファイル形式が非公開・非保証の内部フォーマット
kwinrulesrcは「ユーザーが直接編集する用」に設計されたものではなく、KWin内部の実装都合に依存した形式です。各ルールはUUIDで管理されており、既存ルールを「更新」するのか「新規追加」するのかを正しく判定してUUIDを一致させる必要があります。ここを間違えると、ルールが重複したり、意図しない挙動になったりします。 - 書き込むだけでは反映されない
ファイルを書き換えただけではKWinは気づいてくれません。反映させるにはqdbus6 org.kde.KWin /KWin reconfigureのようなD-Bus呼び出しでKWinに再読み込みさせる必要があり、これも環境やバージョンによって挙動差が出やすい部分です。 - Zlaunch側のアプリ再起動と絡む複雑さ
「位置を取得→ファイル書き込み→KWin再読み込み→Zlaunch再起動」という一連の流れを1ボタンでミスなく実行させるには、各段階でのエラーハンドリング(ルールが見つからない、reconfigureが効かない等)も考える必要が出てきます。 - 現実的な代案
もし「設定ダイアログが本体の下に隠れて動かせない」という入り口の問題さえ解決すればよいなら、もっと簡単な回避策があります。例えば:
- 設定ダイアログ自体にも
windowHandle().startSystemMove()を使った独自ドラッグを実装し、本体とは無関係にどこへでも動かせるようにする(これは既存のタイトルバードラッグの仕組みを流用できるので簡単です) - あるいは設定ダイアログの初期表示位置を「本体の左側」など、隠れない場所に固定する
「ボタン一発でルールファイルを書き換える」という発想自体は面白く、不可能ではないですが、安定して動く保証が薄い分野に踏み込むことになります。まずは「設定ダイアログが動かせない」という本来の困りごとを、上記のような簡単な方法で解消する方向をおすすめしたいのですが、いかがでしょうか。
「出来ないことはないけどリスクも・・・」と面倒くさそうな態度に「それならいいよ(^。^)」とあっさり引き下がった。
しかし、一連の流れがどうも腑に落ちない。無理やり工夫して右下固定が実現したとはいえ、そもそもアプリウィンドウの位置記憶が不可ってなんや(*`Д´*)
実に納得できない。ふだんから思い通りにならない場合も「Windowsでは当たり前に出来ていたのに・・・」は禁句と考えているが、Waylandの仕様の制約があっても、ホントにムリなのか・・・
夕食のぶりの照り焼きと梅酒ロックの旨さにほろ酔いしつつ、ふと思い立ち、食後直ちに仕事場に戻った。
そして、ついに発見した !! ビンゴだった !! ヾ(o´∀`o)ノ

「位置=記憶」に変更してみたら、あら不思議。
ついに当たり前のことが当たり前に出来るようになったのだ。
設定した後、Zlaunchを閉じて再起動すると位置変更が可能になった。そしてアプリを移動して閉じ、開き直すとちゃんと同じ位置で開いてくれた。いいたかないが「Windowsでは当たり前に出来ていた」機能が実現したのだった。

保存したウィンドウの定義は「KDEシステム設定-ウィンドウのルール」で一覧し管理出来る。

この後はもう自由自在。気分に応じてどこにでもランチャーを配置出来るようになった。
・・・ということは??
Claudeにかなり工夫してもらって、設定画面に位置指定機能を付加したこと自体に意味がなかったことになる。

じつはZorinOS上で運用していた時もこの設定項目は機能していなかった。
機能せずともせっかく追加した機能だからいつか役に立つかも、と削除はしていなかったのだ。
Kubuntuのウィンドウ管理機能で同じことが実現すると分かった以上こんどこそお役御免である。
さて。教訓はここからが本文になる。
ClaudeとChatGPT は、もう数え切れないくらいの Linux の悩みを解決してくれた。
しかし、何度かは自分の初心者ならではの発想で不可能を可能にしてきた事実がある。
Claudeが「これ以上の深堀はリスクも増えるしムリ」とギブアップの事案があっても「まだ試してない◯◯をやってみたらどうかな」という具合。たぶん5回くらいは「ビンゴ!!( ゚∀゚)」があったはず。今回が代表的なサンプルだろう。
AI に相談すれば何でも答えてくれるが、実際には質問者のレベルを映したくらいの回答にしかならない。
そのことに気がついてからの自分は盲信する愚かさを捨てて、厚かましい性格に変わってきている。
トラブルシューティングの専門家として、毎回口を開けて感心するしかない博識さで対処を提示してくれるが、結果に関してわずかでも自分の直感に引っかかる要素があれば遠慮なく再質問することにしている。
何度同じことを問い直してもいやなカオひとつせず誠実に回答してくれるのが人間と決定的に違う長所だから。
そんなわけで、最近はClaude(& GPT)には大先生ではなく、頼れるアドバイザーとして二人三脚の心がけで、終わりなきLinux問題に対処している。頼るのは良いが依存は禁物。AI 側も「それが望むところ」と安心しているはず。

コメント