これは、一般的な問題の具体例であり、まだ解決策を見つけることができませんでした。
「サブプログラム」(つまり、エミュレーターまたは仮想デバイス)をそれ自体から起動するプログラム(Android Virtual Device Manager)があります(他の場所からも起動できます)。これらのプログラムのいずれかのインスタンスを同じUnityアイコンの下にグループ化する必要があります。
これを試して達成するために.desktop
ファイルを作成しましたが、その方法を正確に知りません。デスクトップファイルは次のとおりです。
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Name=Android Virtual Device
Icon=/home/ben/.icons/Android.svg
Exec=/home/ben/usr/bin/Android avd
StartupWMClass=Android Virtual Device Manager
私が理解していることから、StartupWMClass
はこれを正しく達成するために設定する必要があるものです。応答ウィンドウでxprop WM_CLASS
を使用して、2つのクラス名(「Android Virtual Device Manager」と「emulator64-arm」)を取得しました。両方とも個別に動作します(起動方法に関係なく、ランチャーアイコンはプログラムに正しくアタッチされています)が、両方で動作するようにすることはできません。
私はどういうわけかStartupWMClass
に2つの値を設定する必要があると仮定していますが、それを正しく行うことができません(または有効な操作かどうかを知る)。環境変数のようにコロンで区切られたもの、コンマで区切られたもの、引用符などを試しましたが、 公式ドキュメント にヒントが見つかりません。
助言がありますか?
編集:
もう1つの、より独創的ですが、おそらくより識別可能な例は、Matlab
を使用したものです。私は2013aを実行していますが、最初に表示されるスプラッシュスクリーンとプログラムはWM_CLASS
値がまったく異なります。つまり、StartupWMClass=com-mathworks-util-PostVMInit
を含むランチャーをクリックすると、スプラッシュ画面に別の(デフォルトでは不明)Unity
アイコンが表示され、残りはランチャーの下にグループ化されます。
xprop WMCLASS
を使用し、最初にスプラッシュ画面をクリックしてから、アクティブなMatlab
セッションで繰り返すと、次の端末出力が得られます。
ben@ben-OptiPlex-9010:~$ xprop WM_CLASS
WM_CLASS(STRING) = "MATLAB", "MATLAB"
ben@ben-OptiPlex-9010:~$ xprop WM_CLASS
WM_CLASS(STRING) = "Sun-awt-X11-XFramePeer", "com-mathworks-util-PostVMInit"
次の行に沿って何かを指定できる場合:
StartupWMClass=com-mathworks-util-PostVMInit&&MATLAB
それは完全に機能します(両方とも別々に機能します)が、構文が存在する場合でも、それについてはわかりません。私は今まで試したことがないことを知っています。
これはデスクトップがうまく機能するための非常に基本的な要素であると考えているため、いずれの方法でもヘルプまたは決定的な答えは素晴らしいでしょう。
Starcraft IIで私にとって同じ問題がthrow playonlinuxを立ち上げました。最初にアプリケーションランチャーがあります。
(WM_CLASS(STRING) = "Blizzard Launcher.exe", "Wine")
そしてゲーム自体:
(WM_CLASS(STRING) = "SC2.exe", "Wine")
Wineはクラスをバイナリ実行可能ファイルで設定していると思います。
私はbamfコードを見ていた(bamf_matcher.c、insert_desktop_file_class_into_table()メソッド):
私の場合、StartupWMClassと同じキーを持つ2つのデスクトップファイルを作成することにより、ごまかします。これは完璧ではありません。なぜなら、ランチャーにいるとき、私はまだ2つのUniyアイコンを持っているからです。
私はこの質問が本当に古いことを知っていますが、同じ問題を経験した後、私は最終的にこれの回避策を作成し、この問題を抱えている人と共有することにしたと思います:
単一の.desktopファイルに複数のWMClassを設定できないため、すべてのウィンドウを単一のWMClassに設定しないのはなぜですか?
次のようなことができます(明らかに、Window 1
、Window 2
、およびpotatoes
をWindows名と目的のWMClassに置き換えてください):
xprop -name "Window 1" -f WM_CLASS 8s -set WM_CLASS "potatoes"
xprop -name "Window 2" -f WM_CLASS 8s -set WM_CLASS "potatoes"
.desktopファイルでは、これを行うことができます:StartupWMClass=potatoes
タダム!すべてのウィンドウがグループ化されました。
しかし、ちょっと、プログラムが開くたびにこれを手動で行っていますか?もちろん違います。
半秒ごとに自動的に行うbashスクリプトを作成できます。
while true
do
xprop -name "Window 1" -f WM_CLASS 8s -set WM_CLASS "potatoes"
xprop -name "Window 2" -f WM_CLASS 8s -set WM_CLASS "potatoes"
sleep 0.5
done
そして最後に、OSが起動するたびに実行するように作成した.shを設定します。
私の答えがこの質問を閲覧している人に役立つことを願っています。