如何在 Wayland 中编写程序来按下诸如 Windows + D 之类的按键?(在 Wayland 中替换“xdotool”)

如何在 Wayland 中编写程序来按下诸如 Windows + D 之类的按键?(在 Wayland 中替换“xdotool”)

我的显示桌面图标/脚本在默认的 Ubuntu 22.04 安装中不起作用,因为它依赖于xdotool按下WindowsD,而xdotool在 Wayland 中不起作用,并且 Ubuntu 22.04 默认启用的是 Wayland 窗口管理器,而不是 X11。那么,我可以使用什么工具来代替?注意:我知道如何现在切换回 X11 窗口管理器,但这不是我的问题。我想要一个可以在 Wayland 中按下按键的工具。

我也在尝试 Python 的pynput库,但也无法让它工作。请看我的尝试:Stack Overflow:在 Python 中按 Windows + D 键时 pynput 库无法按预期工作

无论如何,对于这个问题我只想要一个可以替代并在 Wayland 中工作的工具xdotool,以及一个按下即可WindowsD显示桌面的演示。

注意:如果你也像我一样在 Wayland 中遇到了错误,我有一些修复方法,并展示了如何在 Ubuntu 22.04 中切换回 X11在我的另一个回答中

答案1

我明白了。非常感谢@Rinzwind 指出了 的存在ydotool

以下是如何按下ydotool+ WindowsD它在 X11 和韦兰!

我首先在我的网站上写了这篇文章:教程:开始使用 ydotool 在 Linux 中自动执行按键(或鼠标移动)

有关详细信息,请参阅我的文章。以下是关键部分,直接从我上面的文章中复制而来:

首先,构建并安装它:

# install dependencies
sudo apt update
sudo apt install git cmake scdoc

# build ydotool
# See: https://github.com/ReimuNotMoe/ydotool#build
git clone https://github.com/ReimuNotMoe/ydotool.git
cd ydotool
mkdir build
cd build
cmake ..                 # takes < 1 second
time make -j "$(nproc)"  # takes < 1 second
sudo make install
# Note: the install command installs here:
#
#       -- Install configuration: ""
#       -- Installing: /usr/local/bin/ydotoold
#       -- Installing: /usr/local/bin/ydotool
#       -- Installing: /usr/lib/systemd/user/ydotool.service
#       -- Installing: /usr/local/share/man/man1/ydotool.1
#       -- Installing: /usr/local/share/man/man8/ydotoold.8

# See the man pages for help, and to prove to yourself it is installed
man ydotool   # for the main program
man ydotoold  # for the background daemon process
# help menu
ydotool -h    # for the main program
ydotoold -h   # for the background daemon process [VERY HELPFUL MENU!]

# check the version; my output is `v1.0.4-0-g57ba7d0`
ydotoold --version

现在,使用它:ydotoolWindows+D

# 1. start the `ydotoold` background daemon (`sudo -b` runs it in the
# background; see `sudo -h`).
# - It takes a couple seconds to fully start up and print "READY". Once it does
#   that, hit Enter a couple times to clear out the command line.
sudo -b ydotoold --socket-path="$HOME/.ydotool_socket" --socket-own="$(id -u):$(id -g)"

# 2. Use `ydotool`
# - Have ydotool press Windows + D once to hide all windows, then make it wait 2
#   seconds, then have it press Windows + D again to show all windows:
YDOTOOL_SOCKET="$HOME/.ydotool_socket" ydotool key 125:1 32:1 32:0 125:0; \
    sleep 2; \
    YDOTOOL_SOCKET="$HOME/.ydotool_socket" ydotool key 125:1 32:1 32:0 125:0

# 3. Additional commands you may need: to show, kill, and help

# See the `ydotoold` background running processes
ps auxf | grep ydotoold

# Kill the `ydotoold` background running processes
sudo pkill ydotoold

# View the `ydotool` main help menu, including a list of all sub-commands.
ydotool -h

# View the `ydotool` sub-command help menus. 
# - Bug ( https://github.com/ReimuNotMoe/ydotool/issues/206 ): the daemon *must*
#   be running first to see these help menus!
YDOTOOL_SOCKET="$HOME/.ydotool_socket" ydotool key -h
YDOTOOL_SOCKET="$HOME/.ydotool_socket" ydotool click -h
YDOTOOL_SOCKET="$HOME/.ydotool_socket" ydotool mousemove -h
# etc. 

# Open the Linux C header file containing all available key codes that `ydotool`
# can press
gedit /usr/include/linux/input-event-codes.h

您还可以在线查看此文件中所有可能的密钥代码:https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h

再次强调,欲了解更多详情,请访问我的网站:教程:开始使用 ydotool 在 Linux 中自动执行按键(或鼠标移动)

也可以看看

  1. 如何将“显示桌面”添加到 GNOME dash 或 Ubuntu Dock?
    1. @AndAC 的精彩wmctrl回答
    2. wmctrl我对答案的看法,依赖于我的包含脚本的 eRCaGuy_dotfiles repo。
  2. 问答:如何在 Ubuntu 22.04 中安装最新的 ydotool 1.0.1(在 Wayland 上运行的键盘自动化工具)?

相关内容