私のi3スタートアップファイルで、プログラムを起動するデスクトップを具体的に構成することはできますか?ただし、一般的には、そのプログラムをデスクトップに割り当てずに、デスクトップで1回だけ起動します。
別のワークスペースへの変更を伴う解決策が存在することを認識していますが、これには大きな問題が残ります。「インスタントでない」起動時間を持つプログラムがあるとすぐに、そのプログラムは最後のワークスペースに表示されます希望するワークスペースに切り替えてください。
具体的には、この現在のスタートアップファイルでは、ワークスペース9にatom(これは私を気にするプログラム))の割り当てに関連する回避策を実行しましたが、現時点では問題ありませんが、ロングラン:
assign [class="Atom"] $workspace9
exec atom
exec --no-startup-id i3-msg 'workspace $workspace9; exec
/usr/bin/urxvt'
#exec --no-startup-id i3-msg 'workspace $workspace9; exec /usr/bin/atom'
exec --no-startup-id i3-msg 'workspace $workspace1; exec /usr/bin/urxvt'
atomのコメント付き呼び出しを希望の方法で実行し、割り当てメソッドをすべて破棄したいと思います。
私は実際には関連性があるとは思いませんが念のため:Archに基づいたManjaro-Linuxを実行します。
編集:次のコードスニペットは機能しますが、atomを最後に開いてデスクトップでセッションを開始することを制限するため、この質問は開いたままにしておきます。
#assign [class="Atom"] $workspace9
#exec atom
exec --no-startup-id i3-msg 'workspace $workspace9; exec
/usr/bin/urxvt'
exec --no-startup-id i3-msg 'workspace $workspace1; exec /usr/bin/urxvt'
exec --no-startup-id i3-msg 'workspace $workspace9; exec /usr/bin/atom'
また、atomと同じ動作を示す場合、異なるワークスペースで開始する複数のプログラムを許可しないという重大な欠点もあります。
ウィンドウが表示されるまで待ってから、元のワークスペースに送信します。
#!/bin/bash
activeworkspace=$(i3-msg -t get_workspaces | jq -c '.[] | select(.focused) | .name' --raw-output)
atom &
windowname=atom
xprop -spy -root _NET_ACTIVE_WINDOW | \
while read line ; do
if xprop WM_CLASS -id ${line##* } | grep -q $windowname ; then
i3-msg move "[con_id=\"${line##* }\"]" $activeworkspace
exit
fi
done
jq
を例として使用しますatom &
xprop -spy
を使用して、「プロパティの変更イベントを探して、ウィンドウのプロパティを永久に調べます」。while read line
を使用して、すべての新しいアクティブウィンドウを操作しますxprop WM_CLASS
でそれらのWM_CLASSを取得し、bash ${line##* }
でwindowidを抽出しますgrep $windowname
でフィルタリングi3-msg move ..
でウィンドウを元のワークスペースに移動しますアクティブなワークスペースに留まる必要があり、このワークスペースのウィンドウがフォーカスされます。
新しいatomウィンドウの開始と移動の間にフォーカスされる複数のatomウィンドウがある場合、それは機能しません。この場合、 WM_CLASSの代わりにNET_WM_PID atomを探します。
特定のワークスペースで常に特定のプログラム(Atomなど)を開いておきたい場合は、 i3 User Documentation で説明されているクラス割り当て機能を使用できます。
ターミナルからxprop
を実行し、ウィンドウ(Firefoxなど)をクリックして、それが属するクラスを確認します。 WM_CLASS(STRING)
を探します。
その後、.configファイルに次の行を入れるだけで簡単です。
assign [class="Firefox"] 2
(デフォルト)$Mod + Shift + r
を使用してインスタンスを再起動することを忘れないでください
これで、Firefoxは、いつどこで実行したかに関係なく、常にワークスペース2で開きます。 Atomでも同じことができます。これにより、自由にデスクトップを起動できます。