I3wmとYaSTやら

この記事はopenSUSE Advent Calendar 2023 16日目の記事です。

まえがき(自己紹介/経緯)

自己紹介

はじめまして。函館でしがない情報系学生をしているニック(@rlysleepynick)と申します。

普段は車を壊して直したり、openSUSE環境を壊して直したりすることをしています。

毎回zypper dup したら環境壊れるだろ❗なのでサボってます

わたしについてはこちらをごらんください。

経緯

わたしはopenSUSE Leap 15.4 + i3wm のラップトップ環境を普段使いしています。

かれこれ2年ほどこの環境を使っていますが、ランチャーアプリである Rofi から YaST2 の各種設定画面を起動したときに、画面の半分をxdg-su(XTerm)というアプリが埋めつくしてくることに憤りを感じていました。

こんな感じでパスワード打った後もYaST2を起動している間は画面の半分を占領している。

非常に邪魔だなぁ〜とか思いながら長い間ほったかしにしていましたが、この機会に調べごとがてらどうにかならないかやってみることにしました。

YaST2(GUI)の起動機序

まず、YaST2をGUIで起動したときの起動機序について調べてみました。

最初に一例として、YaST オンラインアップデート のデスクトップエントリを確認してみた。

/usr/share/applications/YaST2/org.opensuse.yast.OnlineUpdate.desktop

中身を見てみると、

Exec=xdg-su -c "/sbin/yast2 online_update"

xdg-su というコマンドに "/sbin/yast2 online_update" という引数を渡して実行するようになってました。

ちなみに/sbin/yast2/usr/sbin/yast2へのリンクでした。

  • そして/usr/sbin/yast2はshell scriptであり、呼ばれた環境の環境変数やオプションによってGUI/CUIとかQt/GTK/ncursesを適切に選択して起動するようになってる

ほかにもよしなにしてくれるようになってるっぽかったんですが、読解するのが面倒(怠惰)だったので現代人らしくChatGPTに要約してもらってみました↓


このスクリプトは、SUSE Linux ディストリビューションのYaST2(Yet another Setup Tool)のメイン起動スクリプトです。YaST2は、システムの設定と管理を行うためのグラフィカルなユーザー インターフェースを提供します。以下は、スクリプトの主な機能と構造の要約です。

  1. 起動オプションの処理: スクリプトは、コマンドライン引数($1, $2, など)を解析し、YaST2の起動オプションに対応する動作を行います。例えば、–qt や –ncurses などが指定されると、それに応じたグラフィカルユーザーインターフェースを選択します。

  2. YaST2のモジュールの起動: 指定されたモジュール(例: menu, online_update)を起動します。モジュールは、システムの設定やパッケージ管理など、特定の機能を担当します。

  3. グラフィカルユーザーインターフェースの選択: YaST2は、Qt、GTK、ncurses のいずれかのユーザーインターフェースを使用できます。環境変数やコマンドラインオプションに基づいて、適切なユーザーインターフェースを選択します。

  4. Chefや他のツールとの競合の確認: Chefクライアントが実行中であれば、ユーザーに警告メッセージを表示し、続行するかどうかを確認します。

  5. GUIプログラムの起動: 選択されたユーザーインターフェースに応じて、対応するYaST2のGUIプログラムを起動します。QtやGTKなどのGUI環境においては、相応の環境変数や引数が設定されます。

  6. YaST2のモジュール実行: YaST2のモジュールが実行されます。このモジュールは、システムの設定を変更するための対話的な手段を提供します。

  7. 終了処理と再起動の確認: YaST2の実行が終了した際には、適切な終了処理を行います。また、/var/lib/YaST2/reboot ファイルが存在すれば、システムを再起動します。

スクリプトは、YaST2の機能を制御し、ユーザーが指定したオプションやモジュールに応じて適切な処理を行うように設計されています。


問題の解決

最終的に、XTermを常にFloatingモードで起動するように、i3WMのconfigを弄ることに落ちついた。

1
2
3
4
~/.config/i3/config

# floating windows
for_window [class="XTerm"] floating enable

上記を~/.config/i3/configに追加する。

これでYaST2をGUIで起動するときに、毎度画面をパスワード入力画面に侵食されずに済む。

  • for_window [class="xdg-su"] floating enable とすれば(ほぼ)パスワード入力時のみにフローティングするようになるかな?と思いましたが、xdg-suはあくまでXTerm上で叩くコマンドであり、GUIアプリケーションでないためか、動きませんでした。

    • そのため、XTermは全ての場合でフローティングで起動するように設定しています。

ついでに見た目を変える

XTermの見た目もデフォだと目によろしくないので、いい感じにしてる人を見つけてパクりました。

~/.Xdefaultを作成してコピペします。

  • 個人的にフォントサイズを変えたかったので変えました。

  • 一部をコメントアウトしています。

変更点は以下の通りです。

1
2
3
4
XTerm*faceSize          : 12
#XTerm*saveLines          : 2000
#XTerm*geometry          : 100x30+300+100
#XTerm*scaleHeight          : 1.15

XTermのカラースキームに関してはググると良い感じのが出てくるっぽいのでお好みで。

さいごに

「パスワード打つ時だけフローティングモードでXTermを起動し、認証成功したらXTermを消す」

あるいはGUIでそれっぽいパスワード入力画面を出す

ができれば100点満点だったと思いますが、自分としては今までが邪魔すぎたので今回のやり方で概ね満足しました。

ほんとにさいごに

後になって知りましたが、KDEの環境にはKDESuというものがあるんですね…

  • これ使えばいいやん!という見方もあると思いますが、i3WMで余計なものいれたくない前提という記事でした! という後付けがましい締めくくりとさせていただきますw

最後になりましたが、読んでいただきありがとうございました。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。