StartupWMClass에 여러 값 설정 (Unity에서 동일한 시작 프로그램으로 그룹화)


20

이것은 아직 해결책을 찾지 못한 일반적인 문제의 구체적인 예입니다.

자체에서 '서브 프로그램'(즉, 에뮬레이터 또는 가상 장치)을 시작하는 프로그램 (Android Virtual Device Manager)이 있습니다 (다른 곳에서 시작할 수도 있음). 이 프로그램의 EITHER 인스턴스를 동일한 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_CLASSrepsective 창 에서 두 클래스 이름 ( 'Android Virtual Device Manager'및 'emulator64-arm')을 얻었습니다. 둘 다 개별적으로 작동합니다 (실행 프로그램 아이콘은 프로그램이 시작되는 방식에 관계없이 프로그램에 올바르게 첨부되어 있음).하지만 둘 다 작동하지는 않습니다.

어떻게 든 두 가지 값을 설정해야 StartupWMClass하지만 올바르게 수행 할 수 없었습니다 (또는 유효한 작업인지 알 수 있음). 환경 변수와 같이 콜론으로 구분하고 쉼표로 구분하고 따옴표 등을 시도했지만 공식 문서 에서 힌트를 찾을 수 없습니다 .

어떤 제안?

편집하다:

또 다른, 더 pedantic하지만 아마도 더 식별 가능한 예가 있습니다 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

그것은 완벽하게 작동하지만 (두 가지가 별도로 작동하므로) 구문이 있는지조차 알 수 없습니다. 나는 지금까지 시도한 것이 아무것도 없다는 것을 알고 있습니다.

이것이 잘 작동하는 데스크탑의 매우 근본적인 요소라고 생각하기 때문에 어떤 도움이나 결정적인 대답이 좋을 것입니다.


1
서랍 에서 힌트를 얻을 수 있습니까?

1
나는의 동영상을 살펴 보았다 Drawers링크에서 그들이 보여 당신이 하위 항목을 클릭 할 때부터, 그것은 단순히 링크, 그것은 여전히에서 자신의 아이콘으로 그룹을 만들어 Unity나가 정지에 노력하고있어입니다 실행
BT

답변:


8

Starcraft II와 같은 문제는 playonlinux를 던졌습니다. 먼저 응용 프로그램 실행기가 있습니다.

  • (WM_CLASS(STRING) = "Blizzard Launcher.exe", "Wine") 그리고 게임 자체 :

  • (WM_CLASS(STRING) = "SC2.exe", "Wine")

와인이 바이너리 실행 파일로 클래스를 설정하고 있다고 생각합니다.

bamf 코드 (bamf_matcher.c, insert_desktop_file_class_into_table () 메서드)를 살펴 보았습니다.

  • 데스크탑 파일과 하나의 클래스 만 연관시키는 맵이 있습니다.
  • StartupWMClass 키는 문자열 목록을 반환하도록 설계되지 않은 g_key_file_get_string ()으로 읽습니다.
  • g_key_file_get_string_list ()는 그렇게 할 수 있지만 bamf 개발자는 여러 클래스를 하나의 단일 데스크탑 파일에 연결할 수 있도록 프레임 워크를 설계하지 않았습니다.

필자의 경우 StartupWMClass와 동일한 키를 사용하여 두 개의 데스크톱 파일을 만들어 속임수를 사용합니다. 발사기에있을 때 여전히 2 개의 Uniy 아이콘이 있기 때문에 이것은 완벽하지는 않지만 중요한 것은 이유를 아는 것입니다 :-).


이것은 매우 유망한 것으로 보입니다. 나는 그들로부터 확인을 받기 위해 질문 을했지만 아직 응답이 없습니다 ...
BT

1
이것은 정답이 아닙니다. 데스크탑 파일 스펙이이 값을 문자열 목록이 아닌 단일 문자열로 만들기 때문에 대답은 "할 수 없습니다"(bamfdaemon은 get_string_list ()가 아닌 get_string_list ()를 사용하는 이유).
dobey

1

나는이 질문이 실제로 오래되었다는 것을 알고 있지만 동일한 문제를 겪은 후에 마침내 이에 대한 해결 방법을 만들고이 문제가있는 사람과 공유하기로 결정했다고 생각합니다.

단일 .desktop 파일에 대해 여러 개의 WMClass를 설정할 수 없으므로 모든 창을 단일 WMClass로 설정하지 않는 이유는 무엇입니까?

(물론, 대체 우리는 같은 것을 할 수 있습니다 Window 1, Window 2그리고 potatoes당신의 창 이름과 원하는 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

타담! 모든 창이 그룹화되었습니다.
그러나 우리는 프로그램이 열릴 때마다 수동으로 이것을하고 있습니까? 당연히 아니지.

0.5 초마다 자동으로 수행하는 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를 설정하십시오. 스크린 샷

내 답변 이이 질문을 탐색하는 사람에게 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.