覆盖 install4j UnixLauncher WM_CLASS 属性
Override install4j UnixLauncher WM_CLASS property
是否可以在 Linux 环境中覆盖 install4j 设置的 WM_CLASS
?
目前正在执行
xprop WM_CLASS
在我使用 install4j 部署的应用程序上总是 returns com-install4j-runtime-launcher-UnixLauncher
。
这是创建正确的 .desktop 文件时的问题,我不想将使用 install4j 部署的所有应用程序组合在一起。
我收集 this question 处理类似的问题。但是,答案对我不起作用。提到的 sys.ext.windowClass
编译器变量在我能找到的任何地方都没有记录,据我所知它什么也没做。
在 Linux 上,window 经理群组 windows 并使用 WM_CLASS
属性.
分配正确的图标
可以使用 xprop 检查此 属性:
xprop WM_CLASS
要指定 .desktop 文件应该影响哪个 WM_CLASS,您可以在桌面文件中使用 StartupWMClass
属性:
StartupWMClass=<my-applications-wm-class>
install4j 的问题是所有部署的应用程序都将使用
com-install4j-runtime-launcher-UnixLauncher
为 WM_CLASS。
正如 Ingo Kegel 在他现在对 this question 的编辑回答中提到的,这可以通过在 Java 中明确设置 WM_CLASS window 属性 来规避] 使用以下代码的应用程序:
String wmClass = ...;
Toolkit toolkit = Toolkit.getDefaultToolkit();
Class<?> toolkitClass = toolkit.getClass();
if (Objects.equals("sun.awt.X11.XToolkit", toolkitClass.getName())) {
Field awtAppClassName = toolkitClass.getDeclaredField("awtAppClassName");
awtAppClassName.setAccessible(true);
awtAppClassName.set(null, wmClass);
}
如果您的应用程序启动时有初步对话框(例如用于选择工作区),请务必分别对所有对话框执行此操作。
是否可以在 Linux 环境中覆盖 install4j 设置的 WM_CLASS
?
目前正在执行
xprop WM_CLASS
在我使用 install4j 部署的应用程序上总是 returns com-install4j-runtime-launcher-UnixLauncher
。
这是创建正确的 .desktop 文件时的问题,我不想将使用 install4j 部署的所有应用程序组合在一起。
我收集 this question 处理类似的问题。但是,答案对我不起作用。提到的 sys.ext.windowClass
编译器变量在我能找到的任何地方都没有记录,据我所知它什么也没做。
在 Linux 上,window 经理群组 windows 并使用 WM_CLASS
属性.
可以使用 xprop 检查此 属性:
xprop WM_CLASS
要指定 .desktop 文件应该影响哪个 WM_CLASS,您可以在桌面文件中使用 StartupWMClass
属性:
StartupWMClass=<my-applications-wm-class>
install4j 的问题是所有部署的应用程序都将使用
com-install4j-runtime-launcher-UnixLauncher
为 WM_CLASS。
正如 Ingo Kegel 在他现在对 this question 的编辑回答中提到的,这可以通过在 Java 中明确设置 WM_CLASS window 属性 来规避] 使用以下代码的应用程序:
String wmClass = ...;
Toolkit toolkit = Toolkit.getDefaultToolkit();
Class<?> toolkitClass = toolkit.getClass();
if (Objects.equals("sun.awt.X11.XToolkit", toolkitClass.getName())) {
Field awtAppClassName = toolkitClass.getDeclaredField("awtAppClassName");
awtAppClassName.setAccessible(true);
awtAppClassName.set(null, wmClass);
}
如果您的应用程序启动时有初步对话框(例如用于选择工作区),请务必分别对所有对话框执行此操作。