diff --git a/deepin-devicemanager-server/deepin-devicecontrol/src/enablecontrol/enableutils.cpp b/deepin-devicemanager-server/deepin-devicecontrol/src/enablecontrol/enableutils.cpp index 7b97a205..9d37eb58 100644 --- a/deepin-devicemanager-server/deepin-devicecontrol/src/enablecontrol/enableutils.cpp +++ b/deepin-devicemanager-server/deepin-devicecontrol/src/enablecontrol/enableutils.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -154,34 +155,51 @@ void EnableUtils::disableInDevice() bool EnableUtils::ioctlOperateNetworkLogicalName(const QString &logicalName, bool enable) { qCDebug(appLog) << "Performing ioctl operation on network interface:" << logicalName << "enable:" << enable; - // 1. 通过ioctl禁用 - int fd = socket(AF_INET, SOCK_STREAM, 0); - if (fd < 0) - return false; - struct ifreq ifr; - strncpy(ifr.ifr_name, logicalName.toStdString().c_str(),IFNAMSIZ); - ifr.ifr_name[IFNAMSIZ - 1] = '\0'; - short flag; - if (enable) { - flag = IFF_UP | IFF_PROMISC; - } else { - flag = ~(IFF_UP | IFF_PROMISC); - } - // 先获取标识 - if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) { - close(fd); - return false; - } - // 获取后重新设置标识 - if (enable) { - ifr.ifr_ifru.ifru_flags |= flag; + if (logicalName.startsWith("wlan") || logicalName.startsWith("wlp")) { // Wireless LAN + QString cmd = QString("rfkill %1 $(rfkill list | grep -A 2 \"phy$(iw dev %2 info 2>/dev/null | awk '/wiphy/{print $2}')\" | awk 'NR==1{print $1}' | tr -d ':')") + .arg(enable ? "unblock" : "block") + .arg(logicalName); + int ret = system(cmd.toStdString().c_str()); + if (ret != 0) { + qCritical() << "Failed to block/unblock wifi: " << " error code: " << ret ; + } + cmd = QString("/sbin/ifconfig %1 %2").arg(logicalName).arg(enable ? "up" : "down"); + ret = system(cmd.toStdString().c_str()); + if (ret != 0) { + qCritical() << "Failed to up/down network: " << logicalName << enable << " error code: " << ret ; + return false; + } } else { - ifr.ifr_ifru.ifru_flags &= flag; - } + // 1. 通过ioctl禁用 + int fd = socket(AF_INET, SOCK_STREAM, 0); + if (fd < 0) + return false; + + struct ifreq ifr; + strncpy(ifr.ifr_name, logicalName.toStdString().c_str(),IFNAMSIZ); + ifr.ifr_name[IFNAMSIZ - 1] = '\0'; + short flag; + if (enable) { + flag = IFF_UP | IFF_PROMISC; + } else { + flag = ~(IFF_UP | IFF_PROMISC); + } + // 先获取标识 + if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) { + close(fd); + return false; + } + // 获取后重新设置标识 + if (enable) { + ifr.ifr_ifru.ifru_flags |= flag; + } else { + ifr.ifr_ifru.ifru_flags &= flag; + } - if (ioctl(fd, SIOCSIFFLAGS, &ifr) < 0) { - close(fd); - return false; + if (ioctl(fd, SIOCSIFFLAGS, &ifr) < 0) { + close(fd); + return false; + } } return true; } diff --git a/deepin-devicemanager/src/DeviceManager/DeviceInput.cpp b/deepin-devicemanager/src/DeviceManager/DeviceInput.cpp index ae5d1fab..468ceb1b 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceInput.cpp +++ b/deepin-devicemanager/src/DeviceManager/DeviceInput.cpp @@ -361,6 +361,16 @@ QString DeviceInput::eventStrFromDeviceFiles(const QString &dfs) return ""; } +QString DeviceInput::getBusInfo() const +{ + return m_SysPath; +} + +QString DeviceInput::getInterface() const +{ + return m_Interface; +} + const QString &DeviceInput::name() const { // qCDebug(appLog) << "Entering name() const."; @@ -501,7 +511,7 @@ bool DeviceInput::isWakeupMachine() } QString info = file.readAll(); - if (m_Name.contains("PS/2")) { + if (m_Name.contains("PS/2") || m_Interface.contains("PS/2")) { // QStringList lines = info.split("\n"); // for (QString line : lines) { // if (line.startsWith("PS2M" && line.contains("disabled"))) { diff --git a/deepin-devicemanager/src/DeviceManager/DeviceInput.h b/deepin-devicemanager/src/DeviceManager/DeviceInput.h index 2f11d2e7..2320df7c 100644 --- a/deepin-devicemanager/src/DeviceManager/DeviceInput.h +++ b/deepin-devicemanager/src/DeviceManager/DeviceInput.h @@ -119,6 +119,10 @@ class DeviceInput : public DeviceBaseInfo */ bool bluetoothIsConnected(); + QString getBusInfo() const; + + QString getInterface() const; + protected: /** * @brief initFilterKey:初始化可现实的可显示的属性,m_FilterKey @@ -181,7 +185,6 @@ class DeviceInput : public DeviceBaseInfo bool m_wakeupChanged = true; // &lst, QListcanWakeupMachine() ? "true" : "false"); menuControl.append(input->wakeupPath()); + if (info->name().contains("PS/2")) { + menuControl.append(input->getBusInfo()); + menuControl.append(input->name()); + } } DeviceNetwork *network = dynamic_cast(info); diff --git a/deepin-devicemanager/src/Page/PageSingleInfo.cpp b/deepin-devicemanager/src/Page/PageSingleInfo.cpp index 6a690cdd..27430db0 100644 --- a/deepin-devicemanager/src/Page/PageSingleInfo.cpp +++ b/deepin-devicemanager/src/Page/PageSingleInfo.cpp @@ -409,7 +409,10 @@ void PageSingleInfo::slotWakeupMachine() // 键盘鼠标唤醒机器 DeviceInput *input = qobject_cast(mp_Device); if (input && !input->wakeupID().isEmpty() && !input->sysPath().isEmpty()) { - DBusWakeupInterface::getInstance()->setWakeupMachine(input->wakeupID(), input->sysPath(), mp_WakeupMachine->isChecked(), input->name()); + DBusWakeupInterface::getInstance()->setWakeupMachine(input->wakeupID(), + input->sysPath(), + mp_WakeupMachine->isChecked(), + input->getInterface()); } // 网卡的远程唤醒 diff --git a/deepin-devicemanager/src/Tool/ThreadExecXrandr.cpp b/deepin-devicemanager/src/Tool/ThreadExecXrandr.cpp index 1b336e14..a49ec242 100644 --- a/deepin-devicemanager/src/Tool/ThreadExecXrandr.cpp +++ b/deepin-devicemanager/src/Tool/ThreadExecXrandr.cpp @@ -102,7 +102,7 @@ void ThreadExecXrandr::loadXrandrInfo(QList> &lstMap, con QRegularExpressionMatch match = re.match(line); if (match.hasMatch()) { lstMap[lstMap.count() - 1].insert("minResolution", match.captured(1)); - lstMap[lstMap.count() - 1].insert("curResolution", match.captured(2)); + lstMap[lstMap.count() - 1].insert("curResolution", match.captured(2).replace(" ", "").replace("x", "×", Qt::CaseInsensitive)); lstMap[lstMap.count() - 1].insert("maxResolution", match.captured(3)); qCDebug(appLog) << "Parsed resolutions: min" << match.captured(1) << "cur" << match.captured(2) << "max" << match.captured(3); } @@ -392,8 +392,8 @@ void ThreadExecXrandr::getResolutionFromDBus(QMap &lstMap) } if (maxResolutionWidth != -1) { - lstMap.insert("maxResolution", QString("%1×%2").arg(maxResolutionWidth).arg(maxResolutionHeight)); - lstMap.insert("minResolution", QString("%1×%2").arg(minResolutionWidth).arg(minResolutionHeight)); + lstMap.insert("maxResolution", QString("%1 x %2").arg(maxResolutionWidth).arg(maxResolutionHeight)); + lstMap.insert("minResolution", QString("%1 x %2").arg(minResolutionWidth).arg(minResolutionHeight)); } } diff --git a/deepin-devicemanager/src/Widget/TableWidget.cpp b/deepin-devicemanager/src/Widget/TableWidget.cpp index 9780f3f2..914b8317 100644 --- a/deepin-devicemanager/src/Widget/TableWidget.cpp +++ b/deepin-devicemanager/src/Widget/TableWidget.cpp @@ -320,10 +320,18 @@ void TableWidget::slotShowMenu(const QPoint &point) bool isWakeup = false; if(file.open(QIODevice::ReadOnly)){ QString info = file.readAll(); - if(info.contains("disabled")) - isWakeup = false; - else - isWakeup = true; + if (wakeupPath.contains("/proc/acpi/wakeup")) { + bool wakedUp = DBusWakeupInterface::getInstance()->isInputWakeupMachine(item->data(Qt::UserRole+4).toString(), + item->data(Qt::UserRole+5).toString()); + isWakeup = wakedUp; + } else { + if(info.contains("disabled")) { + isWakeup = false; + } + else { + isWakeup = true; + } + } } mp_WakeupMachine->setChecked(isWakeup); }else{