はじめに
Linux の rofi というランチャーアプリケーションで、様々な計算をしてくれる rofi-calc を動かしたくなって導入したのだが、そこに選択肢としてアプリケーションが出てきたのならば、そこから起動したくなるのが人の常。(ランチャーとして使う気は全くなかった。)
しかし、選択されたアプリケーションは実行されずに rofi が終了してしまう。これは解決せねばならないと、闘志を燃やすことになる。
背景
GUI Application をインストールすると、親切にショートカットを作ってくれますが、Windows Terminal からシェルに入ったら、そこに入り浸っている人なので、普段からコマンドを打って起動しています。
また、アプリケーションは自分で build して最新版を使うことが多いので、すでにあるアプリケーションのショートカットを参考にして、新規にショートカットを作っています。
自動で作られるショートカットのコピペでは起動できない
理由は、Windows 側で対象のプロセスを立ち上げただけなので...以下略
WSLg というか、 WSL の仕組みを理解してないと、私が他人に説明することができない、と判断しましたので、飛ばします。
シェルの中で起動させる
シェルを起動させて、その中でターゲットのアプリケーション(プロセス)を起動させる。そうすれば、そのアプリケーションが、別のアプリケーションを起動させてから自身を終了しても、まだシェルの中にいるので、別のアプリケーションは動き続けることができる。
オペレーションシステムにおける、シェルの役割を理解しとくと、幸せになれるかもしれない。
どのように記述するのか
PowerShell で、試行錯誤した。
以下に結果だけ書きます。
PS > wslg.exe -d Ubuntu-22.04 --cd "~" -- sh -c -i "rofi -show drun -normal-window"
wslg.exe をパラメーター無しで起動すると、使い方のダイアログが出るので、読んでみてください。
sh と言っても、実態は dash (Ubuntu の場合) なので、 man dash
してマニュアルを読んでください。 ちなみに、 man sh
すると dash のマニュアルが表示されます。(私は、 --help するより man する人です。)
パスが通っているところに wslg.exe があるので、フルパスで書かなくてもよい。
このコマンドを、ショートカットにコピペして終了です。
お疲れ様でした。
おまけ
rofi を WSL から起動するときに -normal-windows をつけないと、挙動がおかしくなる。このオプションは設定ファイル (rasi) に入れることができなくて、起動するときのコマンドラインにつけるしかない。
Shell script を書く方法もあるのだが、 sh -c -i
で済むことが多いので覚えておいて損はない。
読んでいただき、ありがとうございました。