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
相关产品推荐
相关产品推荐

