Ubuntu更新后PyAutoGui模拟鼠标点击出现dconf权限错误
问题:Ubuntu KDE环境下PyAutoGui自动化脚本因dconf权限错误无法运行
问题背景
在Ubuntu 24.04.2 LTS(KDE桌面环境)中,原本长期运行的PyAutoGui自动化脚本,在安装系统推送的软件更新后突然无法运行,抛出dconf权限错误。本机未安装GNOME的dconf配置系统,验证如下:
$ dconf Command 'dconf' not found, but can be installed with: sudo apt install dconf-cli
已安装Python包列表
pip list Package Version ------------- -------- blessed 1.20.0 MouseInfo 0.1.3 numpy 1.26.3 opencv-python 4.9.0.80 pillow 10.2.0 pip 24.2 PyAutoGUI 0.9.54 PyGetWindow 0.0.9 PyMsgBox 1.0.9 pyperclip 1.8.2 PyRect 0.2.0 PyScreeze 0.1.30 python3-xlib 0.15 pytweening 1.0.7 setuptools 72.1.0 six 1.16.0 stopit 1.1.2 watchdog 3.0.0 wcwidth 0.2.13
错误回溯信息
Traceback (most recent call last): File "/home/XXXXXXXXXXXMonitor.py", line 293, in <module> gui.click(pp_location) File "/home/XXXXXXXXXXXMonitor/linux_env/lib/python3.12/site-packages/pyautogui/__init__.py", line 594, in wrapper returnVal = wrappedFunction(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/XXXXXXXXXXXMonitor/linux_env/lib/python3.12/site-packages/pyautogui/__init__.py", line 984, in click button = _normalizeButton(button) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/XXXXXXXXXXXMonitor/linux_env/lib/python3.12/site-packages/pyautogui/__init__.py", line 866, in _normalizeButton swapped = platformModule._mouse_is_swapped() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/XXXXXXXXXXXMonitor/linux_env/lib/python3.12/site-packages/pyautogui/_pyautogui_x11.py", line 91, in _mouse_is_swapped proc = subprocess.Popen(['dconf', 'read', '/org/gnome/desktop/peripherals/mouse/left-handed'], stdout=subprocess.PIPE) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/subprocess.py", line 1026, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "/usr/lib/python3.12/subprocess.py", line 1955, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) PermissionError: [Errno 13] Permission denied: 'dconf'
系统信息
cat /etc/*release* DISTRIB_ID=Ubuntu DISTRIB_RELEASE=24.04 DISTRIB_CODENAME=noble DISTRIB_DESCRIPTION="Ubuntu 24.04.2 LTS" PRETTY_NAME="Ubuntu 24.04.2 LTS" NAME="Ubuntu" VERSION_ID="24.04" VERSION="24.04.2 LTS (Noble Numbat)" VERSION_CODENAME=noble ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=noble LOGO=ubuntu-logo
解决建议
1. 临时快速修复:安装dconf-cli
虽然KDE不依赖dconf,但PyAutoGui的X11模块硬编码调用了该工具,安装后即可让脚本恢复运行:
sudo apt install dconf-cli
2. 永久适配KDE环境:修改PyAutoGui模块代码
找到PyAutoGui安装目录下的_pyautogui_x11.py文件(路径如/home/XXXXXXXXXXXMonitor/linux_env/lib/python3.12/site-packages/pyautogui/_pyautogui_x11.py),修改_mouse_is_swapped函数,处理dconf不存在或无权限的情况:
def _mouse_is_swapped(): try: proc = subprocess.Popen( ['dconf', 'read', '/org/gnome/desktop/peripherals/mouse/left-handed'], stdout=subprocess.PIPE, stderr=subprocess.PIPE ) output, _ = proc.communicate() return output.strip() == b'true' except (FileNotFoundError, PermissionError): # 针对KDE等非GNOME环境,默认返回False(鼠标未交换) return False
修改后保存文件,重新运行脚本即可。
3. 尝试升级PyAutoGui到最新版本
检查PyAutoGui是否已修复跨桌面环境的兼容性问题,执行升级命令:
pip install --upgrade pyautogui
内容的提问来源于stack exchange,提问作者Alp
相关产品推荐
相关产品推荐

