首页 > 解决方案 > 为什么我的 USB 摄像头 - 曾经与 Zoom 一起使用 - 让我的显示器保持开启状态?

问题描述

在我的 Linux (Ubuntu/Gnome/X11) 计算机上,我注意到在某些情况下,即使我不移动鼠标或产生任何其他通常会使我的系统不会进入空闲模式的输入,我的显示器也会永远保持开启状态。

为了更好地监控正在发生的事情,我启动了一个小脚本,它不断显示 X11 空闲时间:

#!/usr/bin/env python3
import ctypes
import ctypes.util
import time

class XScreenSaverInfo(ctypes.Structure):
    _fields_ = [
            ('window', ctypes.c_ulong),
            ('state', ctypes.c_int),
            ('kind', ctypes.c_int),
            ('til_or_since', ctypes.c_ulong),
            ('idle', ctypes.c_ulong),
            ('eventMask', ctypes.c_ulong)
    ]

XScreenSaverInfo_p = ctypes.POINTER(XScreenSaverInfo)
display_p = ctypes.c_void_p
xid = ctypes.c_ulong
c_int_p = ctypes.POINTER(ctypes.c_int)
libX11path = ctypes.util.find_library('X11')
libX11 = ctypes.cdll.LoadLibrary(libX11path)
libX11.XOpenDisplay.restype = display_p
libX11.XOpenDisplay.argtypes = ctypes.c_char_p,
libX11.XDefaultRootWindow.restype = xid
libX11.XDefaultRootWindow.argtypes = display_p,
libXsspath = ctypes.util.find_library('Xss')
libXss = ctypes.cdll.LoadLibrary(libXsspath)
libXss.XScreenSaverQueryExtension.argtypes = display_p, c_int_p, c_int_p
libXss.XScreenSaverAllocInfo.restype = XScreenSaverInfo_p
libXss.XScreenSaverQueryInfo.argtypes = (display_p, xid, XScreenSaverInfo_p)
dpy_p = libX11.XOpenDisplay(None)
_event_basep = ctypes.c_int()
_error_basep = ctypes.c_int()
libXss.XScreenSaverQueryExtension(dpy_p, ctypes.byref(_event_basep), ctypes.byref(_error_basep))
xss_info_p = libXss.XScreenSaverAllocInfo()
rootwindow = libX11.XDefaultRootWindow(dpy_p)

while True:
    time.sleep(0.1)
    libXss.XScreenSaverQueryInfo(dpy_p, rootwindow, xss_info_p)
    print(xss_info_p.contents.idle)

经过一番调查,我发现我可以拆下我的 USB 网络摄像头,让那些空闲的时间再次增加!重新连接它不会让我的系统再次空闲,但运行独立的 Zoom 客户端并使用这个相机会。退出/杀死客户端没有帮助,我必须物理分离相机。之后我什至尝试使用另一个应用程序访问相机(以清理相机状态)但没有效果。使用我的内置笔记本电脑摄像头并没有显示相同的结果,在其他应用程序中使用 USB 摄像头也没有(我在浏览器中尝试了 Cheese 和 Jitsi)。

所以现在我知道了:插入 USB 摄像头并通过 Zoom 客户端访问它会将摄像头变成发送“用户输入”的设备(以XScreenSaverQueryInfo.

虽然我的系统没有闲置只是不舒服,但当我将 USB 网络摄像头与 Zoom(或任何其他带有此功能的软件)一起使用时,我的屏幕时间跟踪器 ( https://github.com/frans-fuerst/track/ ) 会报告不良结果问题)

我该如何进一步调查这种行为?

(系统信息:Ubuntu 18.04 / Zoom 客户端 5.6.7 / 摄像头:LOETAD Webcam 1080P Full HD)

标签: linuxusbx11hid

解决方案


推荐阅读