You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下使用pynput库模拟Windows+D快捷键失效问题求助

如何用pynput触发Ubuntu的Super+D快捷键显示桌面?

解决方法

方法1:调整按键时序,添加短暂延迟

问题根源在于系统还未识别到Super键处于按住状态,程序就已经完成了D键的按下和释放操作。给Super键按下后添加极短延迟,确保系统正确捕获组合键:

import time
from pynput.keyboard import Key, Controller

keyboard = Controller()
SUPER_KEY = Key.cmd

keyboard.press(SUPER_KEY)
time.sleep(0.1)  # 延迟0.1秒,确保系统识别Super键的按住状态
keyboard.press('d')
keyboard.release('d')
time.sleep(0.05)  # 可选延迟,确保D键释放完成后再释放Super键
keyboard.release(SUPER_KEY)

方法2:直接调用系统命令(更可靠)

在Ubuntu中,可通过系统工具直接实现显示/恢复桌面,避免模拟按键的时序问题:

使用wmctrl(需先安装:sudo apt install wmctrl):

import subprocess

# 触发显示/恢复桌面
subprocess.run(["wmctrl", "-k", "on"])

使用xdotool(需先安装:sudo apt install xdotool):

import subprocess

subprocess.run(["xdotool", "key", "super+d"])

问题背景

在Ubuntu系统中,Super+D是显示/恢复桌面的快捷键。我尝试用pynput模拟该组合键,但运行代码后仅触发Super键调出程序启动器,终端还输入了一个d,未达到预期效果。

我的测试代码:

import time
from pynput.keyboard import Key, Controller

keyboard = Controller()
SUPER_KEY = Key.cmd

keyboard.press(SUPER_KEY)
# time.sleep(1)
keyboard.press('d')
keyboard.release('d')
keyboard.release(SUPER_KEY)

运行后的终端输出:

$ ./pynput_press_Windows+D_to_show_the_desktop.py 
$ d

我查阅了pynput文档,Key.cmd对应Super/Windows键,也尝试过Key.cmd_l和Key.cmd_r,文档说明如下:

cmd = 0
通用命令键。在PC平台对应Super/Windows键,Mac对应Command键,属于修饰键。

cmd_l = 0
左侧命令键。在PC平台对应Super/Windows键,Mac对应Command键,属于修饰键。

cmd_r = 0
右侧命令键。在PC平台对应Super/Windows键,Mac对应Command键,属于修饰键。

2023年6月4日更新:我用键盘监控程序测试了手动按下Super+D的按键事件,确认组合键的触发顺序正确:

监控代码:

from pynput import keyboard

print("键盘监控程序,按Esc退出。")

def on_press(key):
    try:
        print('按下字符键 {0}'.format(key.char))
    except AttributeError:
        print('按下特殊键 {0}'.format(key))

def on_release(key):
    print('释放 {0}'.format(key))
    if key == keyboard.Key.esc:
        print("退出程序。")
        return False

# 监听按键事件
with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

手动按下Super+D时的输出:

$ ./pynput_monitor_keyboard.py 
键盘监控程序,按Esc退出。
Key.enter released
按下特殊键 Key.cmd
按下字符键 d
释放 'd'
释放 Key.cmd

内容的提问来源于stack exchange,提问作者Gabriel Staples

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 07:15:02