Ubuntu 22.04连接Wacom Intuos 4D鼠标触发Xorg崩溃致注销的问题排查求助
Ubuntu 22.04连接Wacom Intuos 4D鼠标触发Xorg崩溃致注销的问题排查求助
我刚装了Ubuntu 22.04.1 LTS Desktop(x86_64,X11环境),接上了老款Wacom USB平板(型号gd-1218-u,对应"Wacom Intuos 12x18" - Intuos(1)),平板本身表现很好:笔压敏感度能直接在Inkscape里用,线条粗细会跟着压力变化,体验超棒!
但只要把配套的4D鼠标放在平板上(完全没按任何按键),系统就会出问题——黑屏一秒后直接跳转到登录界面,之前打开的所有窗口都被关闭了,这个现象我试了好多次,100%能复现。
我现在想搞清楚原因:有没有办法记录所有输入操作?类似键盘记录工具,但还要能监控鼠标/平板的移动数据?我怀疑这个鼠标可能误触发了某个快捷键组合,或者产生了一串异常的点击/移动序列导致注销,但目前没有证据。
补充排查日志
后来我在18:16:00把鼠标放到平板上,通过系统的"Logs"应用查到了Xorg崩溃的相关日志,关键内容如下:
18:16:00 Xorg: Xorg: ./WacomInterface.h:206: wcmAxisValue: Assertion `snprintf(buf, len, "%d", val) < len' failed. 18:16:00 Xorg: (EE) Backtrace: 18:16:00 Xorg: (EE) 0: /usr/lib/xorg/Xorg (OsLookupColor+0x139) [0x560544858719] 18:16:00 Xorg: (EE) 1: /lib/x86_64-linux-gnu/libc.so.6 (__sigaction+0x50) [0x7fdf3ba2a520] 18:16:00 Xorg: (EE) 2: /lib/x86_64-linux-gnu/libc.so.6 (pthread_kill+0x12c) [0x7fdf3ba7ea7c] 18:16:00 Xorg: (EE) 3: /lib/x86_64-linux-gnu/libc.so.6 (raise+0x16) [0x7fdf3ba2a476] 18:16:00 Xorg: (EE) 4: /lib/x86_64-linux-gnu/libc.so.6 (abort+0xd3) [0x7fdf3ba107f3] 18:16:00 Xorg: (EE) 5: /lib/x86_64-linux-gnu/libc.so.6 (?+0x0) [0x7fdf3ba1071b] 18:16:00 Xorg: (EE) unw_get_proc_name failed: no unwind info found [-10] 18:16:00 Xorg: (EE) 6: /lib/x86_64-linux-gnu/libc.so.6 (__assert_fail+0x46) [0x7fdf3ba21e96] 18:16:00 Xorg: (EE) 7: /usr/lib/xorg/modules/input/wacom_drv.so (?+0x0) [0x7fdf2aa80dbf] 18:16:00 Xorg: (EE) unw_get_proc_name failed: no unwind info found [-10] 18:16:00 Xorg: (EE) 8: /usr/lib/xorg/modules/input/wacom_drv.so (?+0x0) [0x7fdf2aa8160f] 18:16:00 Xorg: (EE) unw_get_proc_name failed: no unwind info found [-10] 18:16:00 Xorg: (EE) 9: /usr/lib/xorg/modules/input/wacom_drv.so (?+0x0) [0x7fdf2aa84114] 18:16:00 Xorg: (EE) unw_get_proc_name failed: no unwind info found [-10] 18:16:00 Xorg: (EE) 10: /usr/lib/xorg/modules/input/wacom_drv.so (?+0x0) [0x7fdf2aa782f8] 18:16:00 Xorg: (EE) unw_get_proc_name failed: no unwind info found [-10] 18:16:00 Xorg: (EE) 11: /usr/lib/xorg/Xorg (input_unlock+0x2e7) [0x5605448569c7] 18:16:00 Xorg: (EE) 12: /usr/lib/xorg/Xorg (OsCleanup+0x571) [0x560544859101] 18:16:00 Xorg: (EE) 13: /usr/lib/xorg/Xorg (input_unlock+0x109) [0x5605448567e9] 18:16:00 Xorg: (EE) 14: /lib/x86_64-linux-gnu/libc.so.6 (pthread_condattr_setpshared+0x513) [0x7fdf3ba7cb43] 18:16:00 Xorg: (EE) 15: /lib/x86_64-linux-gnu/libc.so.6 (__xmknodat+0x230) [0x7fdf3bb0ea00] 18:16:00 Xorg: (EE) 18:16:00 Xorg: Fatal server error: 18:16:00 Xorg: (EE) Caught signal 6 (Aborted). Server aborting 18:16:00 Xorg: (EE) 18:16:00 Xorg: (EE) 18:16:00 Xorg: (EE) Please consult the The X.Org Foundation support 18:16:00 Xorg: at http://wiki.x.org 18:16:00 Xorg: for help. 18:16:00 Xorg: (EE) Please also check the log file at "/home/loon/.local/share/xorg/Xorg.0.log" for additional information. 18:16:00 Xorg: (EE) 18:16:00 Xorg: (II) AIGLX: Suspending AIGLX clients for VT switch 18:16:00 Xorg: (EE) Server terminated with error (1). Closing log file. 18:16:00 Xorg: (EE) Server terminated with error (1). Closing log file.
错误分析
这个断言错误对应的是Wacom驱动里的wcmAxisValue函数,代码逻辑大概是这样的:
static inline void wcmAxisValue(const WacomAxisData *data, enum WacomAxisType which, char *buf, size_t len) { int val = 0; int rc; if (!wcmAxisGet(data, which, &val)) { rc = snprintf(buf, len, "N/A"); assert(rc > 0 && (size_t)rc < len); return; } rc = snprintf(buf, len, "%d", val); assert(rc > 0 && (size_t)rc < len); }
我猜测是4D鼠标接入后,某个轴的数据值转换成字符串后长度超过了缓冲区buf的大小len,触发了断言失败,进而导致Xorg直接崩溃退出,系统也就回到了登录界面。
另外还有个奇怪的现象:在登录界面的时候,我可以把鼠标放在平板上甚至用它选择用户,但输入密码登录后,立刻就会被踢回登录界面。
现在想请教大家:有没有什么办法能解决这个断言失败的问题?或者有没有临时的 workaround,比如禁用鼠标的某些轴,或者调整驱动的缓冲区设置?
备注:内容来源于stack exchange,提问作者loonquawl




