我有一个没有设置自己的 x11 窗口类的应用程序,有没有一种简单的方法可以从命令行执行此操作?我已经搜索了 x11 命令来执行此操作,但没有找到任何内容。
例子:
some_command --window-class 'NewWindowClass' --run MY_PROGRAM
答案1
应用程序在创建窗口时设置类。
这意味着应用程序最终会确定您是否可以设置该类,如果可以,则使用什么命令行选项。没有通用的选择。
特别是,您不能从另一个应用程序执行此操作(除非您开始通过预加载库以及拦截 XCreateWindow 调用等来执行棘手的操作)
但是,如果应用程序使用 Xt 命令行解析,则该选项-class
通常会起作用(除非被应用程序禁用)。
答案2
我也需要这个功能。怎么样:
xclock &
PID=$!
xdotool search --sync --all --pid ${PID} --name '.*' set_window --classname "A" set_window --class "B"
它的工作原理是:
MY_PROGRAM
在后台启动 X 应用程序(在您的情况下是)- 将启动的应用程序的进程 ID (PID) 保存到变量中
- 用于
xdotool
从 PID 中查找 X 窗口 ID(它甚至会等到窗口第一次出现时使用该sync
选项) - 用于
xdotool
设置窗口的classname
和class
注意:我们必须这样做,xdotool search --sync --all --pid ${PID} --name '.*'
因为似乎xdotool
不支持更短的调用,例如xdotool search --sync --pid ${PID}
仅基于 PID 进行搜索。
此外,这可能无法像文档中所述那样工作xdotool
:
这可能不适用于某些未在其窗口上设置此元数据的 X 应用程序
如果您有可靠的方法自己获取 X 窗口 ID,您可以简单地执行以下操作(更改0x0620000a
为您自己的 X 窗口 ID):
xdotool set_window --classname "A" 0x0620000a set_window --class "B" 0x0620000a
要检查它是否有效,您可以执行以下操作:
wmctrl -l -x -p | grep xclock
应该输出如下内容:
0x0640000a 0 993355 A.B pc xclock