#wayland #kde #xdotool #用户界面

应用 kdotool

一个类似 xdotool 的工具,用于操作 KDE Wayland 上的窗口

1 个不稳定版本

0.2.1 2023年11月23日

#1950命令行工具

Apache-2.0

41KB
783

kdotool - KDE Wayland 的 xdotool 克隆

简介

出于安全考虑,Wayland 删除了大部分 xdotool 使用来模拟用户输入和控制窗口的 X11 API。 ydotool 通过直接与内核输入设备通信解决了输入部分。然而,对于窗口控制部分,您必须使用每个 Wayland 合成器的自有 API。

此程序使用 KWin 的脚本 API 来控制窗口。在每次调用中,它都会动态生成一个 KWin 脚本,将其加载到 KWin 中,运行它,然后通过 KWin 的 D-Bus 接口将其删除。

此程序应与 KDE 5 和即将到来的 KDE 6 兼容。它应与 Wayland 和 X11 会话兼容。(但您仍然可以在 X11 中使用原始的 xdotool。所以这主要是为 Wayland 而设计的。)

并非所有 xdotool 命令都受支持。一些命令无法通过 KWin API 获取。一些可能甚至在 Wayland 中也不可能。有关详细信息,请参阅下文。

请参阅 xdotool 文档 了解每个命令的用法。

请注意,此程序使用的 窗口 ID 是 KWin 的内部窗口 ID,看起来像 UUID(例如 {04add7fb-72b8-4e58-8ac1-5e22730b907b})。它不是 X11 窗口 ID。

全局选项

  • --help 显示帮助。
  • --version 显示版本。

xdotool 中未提供的选项

  • --dry-run 只打印生成的 KWin 脚本。不要运行它。
  • --debug 打印调试消息。
  • --shortcut _shortcut_ 指定要运行的生成的 KWin 脚本的快捷键。快捷键必须采用 modifier+key 格式,例如 Alt+Shift+X。快捷键将在 KWin 中注册。脚本不会立即运行。您必须按快捷键才能运行它。
    • --name _name_ 为快捷键指定名称,这样您就可以稍后使用 --remove 删除它。此选项仅在 --shortcut 下有效。
  • --remove _name_ 删除之前注册的快捷键。

不在 xdotool 中的新命令

以下命令可用于链式命令中

  • savewindowstack _name_ 将当前窗口堆栈保存到变量
  • loadwindowstack _name_ 加载先前保存的窗口堆栈

支持的 xdotool 命令

窗口查询

这些命令生成一个窗口堆栈,后续的 窗口动作 命令可以引用它。

  • search
    • 缺失
      • --maxdepth
      • --onlyvisible
      • --sync
    • 注意
      • --screen (仅限 KDE 5)
  • getactivewindow

窗口动作

这些命令要么带有一个窗口-id 参数,要么使用窗口堆栈。

  • getwindowname
  • getwindowclassname
  • getwindowpid
  • getwindowgeometry
    • 缺失: --shell
    • 注意: 仅在 KDE 5 中显示屏幕编号
  • windowsize
    • 缺失
      • --usehints
      • --sync
  • windowmove
    • 缺失
      • --sync
  • windowminimize
    • 缺失: --sync
  • windowraise (仅限 KDE 6)
    • 使用 windowactivate 替代吗?
  • windowactivate
    • 缺失: --sync
  • windowclose
  • set_desktop_for_window
  • get_desktop_for_window
  • windowstate
    • 支持的属性
      • above
      • below
      • skip_taskbar
      • skip_pager
      • fullscreen
      • shaded
      • demands_attention
    • 缺失
      • modal
      • sticky
      • hidden
      • maximized_vert
      • maximized_horz

全局动作

这些动作不是针对特定窗口,而是针对整个桌面。

  • set_desktop
  • get_desktop
  • set_num_desktops (仅限 KDE 5)
  • get_num_desktops

不支持

您可以使用 ydotooldotoolwtype 等工具进行这些操作

  • 键盘命令
  • 鼠标命令

KWin 没有这样的功能

  • set_desktop_viewport
  • get_desktop_viewport

X11 特定

  • windowreparent
  • windowmap
  • windowunmap

不清楚我们是否可以支持

  • 行为窗口动作命令
  • exec
  • sleep
  • 脚本

KWin 有这样的功能,但没有公开到 js API

  • selectwindow
  • windowlower
  • windowquit
  • windowkill
  • getwindowfocus: 使用 getactivewindow 替代吗?
  • windowfocus: 使用 windowactivate 替代吗?
  • set_window

故障排除

如果任何操作无法正常工作,您可以使用 --debug 选项重新运行该命令。它将打印生成的 KWin 脚本,以及 KWin 脚本的输出。如果您认为这是一个错误,请创建一个 GitHub 上的问题。

依赖关系

~14-25MB
~397K SLoC