From 6441dc4173416b56f1d2ee1b43250d75690270f0 Mon Sep 17 00:00:00 2001 From: zhanghongyuan Date: Fri, 18 Sep 2026 09:55:43 +0800 Subject: [PATCH] fix: restore USB device enable/disable after driver cleared 1. Root cause: setInfoFromLshw() clears driver when lshw reports "usbfs", leaving it empty; empty driver plus avail=="yes" triggers setCanEnable(false), hiding the enable/disable button in context menu 2. Fix: after clearing usbfs driver, check if m_SysPath contains "usb" and set m_Driver to "usb" as fallback, preventing the empty-driver condition 3. Impact: USB devices (cameras, etc.) retain enable/disable button after being disabled; non-USB devices unaffected; usbfs clearing logic preserved (bug 333969 fix intact) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Log: Fix USB device unable to re-enable after being disabled Influence: 1. Test USB camera disable then re-enable via context menu 2. Test non-USB other devices display and enable/disable behavior 3. Verify usbfs driver values are still filtered from display fix: 修复USB设备禁用后无法再次启用的问题 1. 根因:setInfoFromLshw() 在 lshw 报告驱动为 "usbfs" 时清除驱动 值,导致驱动为空;空驱动且 avail 为 "yes" 时触发 setCanEnable(false),右键菜单中启用/禁用按钮消失 2. 方案:清除 usbfs 驱动后,检查 m_SysPath 是否包含 "usb", 若是则设置 m_Driver 为 "usb" 作为回退值,避免驱动为空 3. 影响:USB 设备(摄像头等)禁用后保留启用/禁用按钮;非 USB 设备不受影响;usbfs 清除逻辑保留(bug 333969 修复不受影响) Log: 修复USB设备禁用后无法再次启用的问题 Influence: 1. 测试USB摄像头禁用后通过右键菜单重新启用 2. 测试非USB其他设备的显示和启用/禁用功能 3. 验证usbfs驱动值仍被正确过滤不显示 PMS: BUG-377341 --- deepin-devicemanager/src/DeviceManager/DeviceOthers.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deepin-devicemanager/src/DeviceManager/DeviceOthers.cpp b/deepin-devicemanager/src/DeviceManager/DeviceOthers.cpp index 2c9689810..fdf0d7460 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceOthers.cpp +++ b/deepin-devicemanager/src/DeviceManager/DeviceOthers.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -37,6 +37,9 @@ void DeviceOthers::setInfoFromLshw(const QMap &mapInfo) setAttribute(mapInfo, "logical name", m_LogicalName); if (m_Driver.toLower() == "usbfs") m_Driver.clear(); + if (m_Driver.isEmpty() && m_SysPath.contains("usb")) { + m_Driver = "usb"; + } if(m_Driver.isEmpty() && !m_Avail.compare("yes", Qt::CaseInsensitive)){ setForcedDisplay(true); setCanEnable(false);