在 Linux 系统中,使用 Python 模拟键盘输入主要有以下几种方法,适用于不同的场景和需求:

方法 1:使用 pyautogui(跨平台,推荐)
pyautogui 是一个简单易用的跨平台 GUI 自动化库,支持模拟键盘和鼠标输入。
安装
pip install pyautogui
示例代码
import pyautogui
import time
# 模拟按下 'a' 键
pyautogui.press('a')
# 模拟按下组合键 Ctrl+C
pyautogui.hotkey('ctrl', 'c')
# 模拟输入一段文字
pyautogui.write('Hello, World!', interval=0.1) # 每个字符间隔 0.1 秒
# 模拟按下 Enter 键
pyautogui.press('enter')
# 等待 2 秒
time.sleep(2)
注意事项
- 权限问题:如果需要在无头服务器(如 Docker 容器或远程服务器)上运行,可能需要配置虚拟显示(如
Xvfb)。 - 防冲突:默认情况下,
pyautogui有安全机制,移动鼠标到屏幕左上角会抛出pyautogui.FailSafeException,可通过pyautogui.FAILSAFE = False禁用(不推荐)。
方法 2:使用 keyboard(仅限 Linux,需 root 权限)
keyboard 库直接与 Linux 内核的输入设备交互,需要 root 权限。
安装
pip install keyboard
示例代码
import keyboard
# 模拟按下 'a' 键
keyboard.press('a')
keyboard.release('a')
# 模拟输入一段文字
keyboard.write('Hello, Linux!', delay=0.1)
# 监听键盘事件(可选)
keyboard.wait('esc') # 按下 Esc 键退出
注意事项
- 权限要求:必须以
root运行脚本(sudo python script.py)。 - 依赖:可能需要安装
libudev开发包(sudo apt-get install libudev-dev)。 - 局限性:在虚拟环境中可能不工作。
方法 3:使用 xdotool(命令行工具 + Python 子进程)
xdotool 是 Linux 下的命令行工具,可通过 Python 的 subprocess 模块调用。
安装
sudo apt-get install xdotool # Debian/Ubuntu sudo yum install xdotool # CentOS/RHEL
示例代码
import subprocess # 模拟按下 'a' 键 subprocess.run(['xdotool', 'key', 'a']) # 模拟输入文字 subprocess.run(['xdotool', 'type', 'Hello from xdotool']) # 模拟组合键 Ctrl+Alt+Delete subprocess.run(['xdotool', 'key', 'Ctrl+Alt+Delete'])
注意事项
- 依赖 X11:需要在图形界面(X11)环境下运行。
- 灵活性:适合简单的自动化任务,但不如 Python 库灵活。
方法 4:使用 uinput(内核模块,高级用法)
uinput 是 Linux 内核的虚拟输入设备模块,适合需要底层控制的场景(如模拟游戏手柄或自定义键盘)。

安装
sudo apt-get install python3-uinput # 安装 Python 绑定 sudo modprobe uinput # 加载内核模块
示例代码
from evdev import UInput, ecodes, KeyEvent # 创建虚拟输入设备 ui = UInput() # 模拟按下 'a' 键 ui.write(ecodes.EV_KEY, ecodes.KEY_A, KeyEvent.key_down) ui.syn() # 同步事件 # 模拟释放 'a' 键 ui.write(ecodes.EV_KEY, ecodes.KEY_A, KeyEvent.key_up) ui.syn() ui.close()
注意事项
- 复杂度高:需要了解 Linux 输入子系统(
evdev)。 - 权限要求:必须以
root运行。
总结与选择
| 方法 | 适用场景 | 权限要求 | 跨平台 |
|---|---|---|---|
pyautogui |
跨平台 GUI 自动化(推荐) | 无(X11 环境) | |
keyboard |
Linux 原生键盘输入 | root | |
xdotool |
命令行快速自动化 | 无(X11 环境) | |
uinput |
底层虚拟输入设备(高级) | root |
推荐方案
- 大多数场景:使用
pyautogui(简单、跨平台)。 - 无头服务器:结合
Xvfb虚拟显示运行pyautogui。 - Linux 原生需求:使用
keyboard(需 root)或xdotool(命令行)。
示例:结合 Xvfb 在无头服务器运行
# 安装 Xvfb sudo apt-get install xvfb # 运行脚本(后台虚拟显示) xvfb-run -a python your_script.py
通过以上方法,你可以根据需求选择最适合的方案模拟键盘输入。
