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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:22:33