Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
X11:Liri:git
qt5-qtudev
_service:obs_scm:qt5-qtudev-20211226+git.dfe043...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:obs_scm:qt5-qtudev-20211226+git.dfe043f.obscpio of Package qt5-qtudev
07070100000000000081A400000000000000000000000161C8AFF6000000D1000000000000000000000000000000000000002F00000000qt5-qtudev-20211226+git.dfe043f/.gitattributes.tag export-subst .gitignore export-ignore .gitattributes export-ignore .gitmodules export-ignore .github export-ignore .travis export-ignore .travis.yml export-ignore .tx export-ignore .mailmap export-ignore 07070100000001000041ED00000000000000000000000361C8AFF600000000000000000000000000000000000000000000002800000000qt5-qtudev-20211226+git.dfe043f/.github07070100000002000041ED00000000000000000000000361C8AFF600000000000000000000000000000000000000000000003200000000qt5-qtudev-20211226+git.dfe043f/.github/workflows07070100000003000081A400000000000000000000000161C8AFF60000067F000000000000000000000000000000000000003C00000000qt5-qtudev-20211226+git.dfe043f/.github/workflows/build.ymlname: CI on: push: branches: - master - develop pull_request: branches: - master - develop env: CLAZY_CHECKS: "level1" jobs: build: if: "!contains(github.event.head_commit.message, 'ci skip')" strategy: matrix: compiler: - gcc - clang container: - suse-qt515 runs-on: ubuntu-latest container: image: liridev/${{ matrix.container }} steps: - name: Extract branch name id: extract_branch shell: bash run: | if [ -n "${{ github.base_ref }}" ]; then echo "##[set-output name=branch;]${{ github.base_ref }}" else github_ref=${{ github.ref }} echo "##[set-output name=branch;]${github_ref##*/}" fi - name: Qt version identifier id: qt_version shell: bash run: | qtverid=`echo "${{ matrix.container }}" | sed -e 's,suse-qt,,g'` echo "##[set-output name=id;]${qtverid}" - uses: actions/checkout@v2 - name: Build dependencies run: | set -x ./.github/workflows/scripts/build-deps ${{ steps.extract_branch.outputs.branch }} - name: Build run: | set -x mkdir -p build cd build if [ "${{ matrix.compiler }}" == "clang" ]; then export CC=clang export CXX=clang++ cmake .. -DLIRI_ENABLE_CLAZY:BOOL=ON -DCMAKE_INSTALL_PREFIX=/usr else cmake .. -DCMAKE_INSTALL_PREFIX=/usr fi make -j $(getconf _NPROCESSORS_ONLN) sudo make install 07070100000004000081A400000000000000000000000161C8AFF6000001C7000000000000000000000000000000000000003D00000000qt5-qtudev-20211226+git.dfe043f/.github/workflows/checks.ymlname: Checks on: push: branches: - master - develop tags: - v* pull_request: types: - opened - synchronize - reopened - edited env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} jobs: wip: if: "!contains(github.event.head_commit.message, 'ci skip') && github.event_name == 'pull_request'" runs-on: ubuntu-latest steps: - name: Work in progress uses: wip/action@master 07070100000005000081A400000000000000000000000161C8AFF600000140000000000000000000000000000000000000003B00000000qt5-qtudev-20211226+git.dfe043f/.github/workflows/copr.ymlname: COPR on: push: branches: - develop jobs: copr: if: "!contains(github.event.head_commit.message, 'ci skip') && !contains(github.event.head_commit.message, 'copr skip')" runs-on: ubuntu-latest steps: - name: Rebuild package run: curl -X POST ${{ secrets.COPR_WEBHOOK_URL }} 07070100000006000041ED00000000000000000000000261C8AFF600000000000000000000000000000000000000000000003A00000000qt5-qtudev-20211226+git.dfe043f/.github/workflows/scripts07070100000007000081ED00000000000000000000000161C8AFF6000001B7000000000000000000000000000000000000004500000000qt5-qtudev-20211226+git.dfe043f/.github/workflows/scripts/build-deps#!/bin/bash # SPDX-FileCopyrightText: 2021 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> # # SPDX-License-Identifier: BSD-3-Clause set -e branch=$1 if [ -z "$branch" ]; then echo "Usage: $0 [branch]" exit 1 fi curdir=$(dirname `readlink -f $0`) mkdir -p /tmp/build-deps pushd /tmp/build-deps git clone git://github.com/liri-infra/ci-scripts for repo in cmake-shared; do ./ci-scripts/build-liri $repo $branch done popd 07070100000008000081A400000000000000000000000161C8AFF6000000F1000000000000000000000000000000000000002900000000qt5-qtudev-20211226+git.dfe043f/.mailmapPier Luigi Fiorini <pierluigi.fiorini@liri.io> <plfiorini@users.noreply.github.com> Pier Luigi Fiorini <pierluigi.fiorini@liri.io> <pierluigi.fiorini@hawaiios.org> Pier Luigi Fiorini <pierluigi.fiorini@liri.io> <pierluigi.fiorini@gmail.com> 07070100000009000081A400000000000000000000000161C8AFF60000000C000000000000000000000000000000000000002500000000qt5-qtudev-20211226+git.dfe043f/.tag$Format:%H$ 0707010000000A000081A400000000000000000000000161C8AFF6000000CA000000000000000000000000000000000000002B00000000qt5-qtudev-20211226+git.dfe043f/AUTHORS.mdQt Udev ======= # Core Developers * Pier Luigi Fiorini # Contributors You can see the list of contributors to this code base, and the number of their commits with: ```sh git shortlog -s -e -n ``` 0707010000000B000081A400000000000000000000000161C8AFF600000441000000000000000000000000000000000000002F00000000qt5-qtudev-20211226+git.dfe043f/CMakeLists.txtcmake_minimum_required(VERSION 3.10.0) project("QtUdev" VERSION "1.1.0" DESCRIPTION "Qt style API to use udev" LANGUAGES CXX C ) ## Shared macros and functions: if(NOT LIRI_LOCAL_ECM) find_package(LiriCMakeShared "2.0.0" REQUIRED NO_MODULE) list(APPEND CMAKE_MODULE_PATH "${LCS_MODULE_PATH}") endif() ## Set minimum versions required: set(QT_MIN_VERSION "5.8.0") ## Add some paths to check for CMake modules: list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") ## Liri specific setup common for all modules: include(LiriSetup) ## Only build on the appropriate platforms. if(NOT UNIX OR ANDROID) message(NOTICE "Skipping the build as the condition \"UNIX OR ANDROID\" is not met.") return() endif() ## Find Qt 5: find_package(Qt5 "${QT_MIN_VERSION}" CONFIG REQUIRED COMPONENTS Core DBus ) ## Treat warnings as errors: add_compile_options(-Wall -Wextra -Werror) ## Add subdirectories: add_subdirectory(src/udev) if(BUILD_TESTING) if(TARGET Qt5Udev) add_subdirectory(tests/auto/udev) endif() endif() 0707010000000C000081A400000000000000000000000161C8AFF600001DE3000000000000000000000000000000000000002F00000000qt5-qtudev-20211226+git.dfe043f/LICENSE.LGPLv3 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. 0707010000000D000081A400000000000000000000000161C8AFF60000067C000000000000000000000000000000000000002A00000000qt5-qtudev-20211226+git.dfe043f/README.mdQt Udev ======= [![License](https://img.shields.io/badge/license-LGPLv3.0-blue.svg)](http://www.gnu.org/licenses/lgpl.txt) [![GitHub release](https://img.shields.io/github/release/lirios/qtudev.svg)](https://github.com/lirios/qtudev) [![GitHub issues](https://img.shields.io/github/issues/lirios/qtudev.svg)](https://github.com/lirios/qtudev/issues) [![CI](https://github.com/lirios/qtudev/workflows/CI/badge.svg?branch=develop)](https://github.com/lirios/qtudev/actions?query=workflow%3ACI) Qt-style API to use udev. ## Dependencies Qt >= 5.8.0 with at least the following modules is required: * [qtbase](http://code.qt.io/cgit/qt/qtbase.git) And the following modules: * [cmake](https://gitlab.kitware.com/cmake/cmake) >= 3.10.0 * [cmake-shared](https://github.com/lirios/cmake-shared.git) >= 1.0.0 The following modules and their dependencies are required: * [udev](http://www.freedesktop.org/software/systemd/libudev/) For autotests you need: * [umockdev](https://github.com/martinpitt/umockdev/) ## Installation ```sh mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/path/to/prefix .. make make install # use sudo if necessary ``` Replace `/path/to/prefix` to your installation prefix. Default is `/usr/local`. ### Logging categories Qt 5.2 introduced logging categories and Liri takes advantage of them to make debugging easier. Please refer to the [Qt](http://doc.qt.io/qt-5/qloggingcategory.html) documentation to learn how to enable them. ### Available categories * **qtudev:** udev integration ## Licensing Licensed under the terms of the GNU Lesser General Public License version 3 or, at your option, any later version. 0707010000000E000041ED00000000000000000000000261C8AFF600000000000000000000000000000000000000000000002600000000qt5-qtudev-20211226+git.dfe043f/cmake0707010000000F000081A400000000000000000000000161C8AFF600000055000000000000000000000000000000000000003800000000qt5-qtudev-20211226+git.dfe043f/cmake/FindLibudev.cmakefind_package(PkgConfig) pkg_check_modules(Libudev libudev REQUIRED IMPORTED_TARGET) 07070100000010000081A400000000000000000000000161C8AFF60000005B000000000000000000000000000000000000003900000000qt5-qtudev-20211226+git.dfe043f/cmake/FindUmockdev.cmakefind_package(PkgConfig) pkg_check_modules(Umockdev umockdev-1.0 REQUIRED IMPORTED_TARGET) 07070100000011000041ED00000000000000000000000361C8AFF600000000000000000000000000000000000000000000002400000000qt5-qtudev-20211226+git.dfe043f/qbs07070100000012000041ED00000000000000000000000361C8AFF600000000000000000000000000000000000000000000002C00000000qt5-qtudev-20211226+git.dfe043f/qbs/modules07070100000013000041ED00000000000000000000000261C8AFF600000000000000000000000000000000000000000000003500000000qt5-qtudev-20211226+git.dfe043f/qbs/modules/umockdev07070100000014000081A400000000000000000000000161C8AFF6000002DE000000000000000000000000000000000000004200000000qt5-qtudev-20211226+git.dfe043f/qbs/modules/umockdev/umockdev.qbsimport qbs 1.0 import qbs.Probes Module { readonly property bool found: probe.found readonly property string packageVersion: probe.modversion Depends { name: "cpp" } cpp.defines: probe.defines == undefined ? [] : probe.defines cpp.commonCompilerFlags: probe.compilerFlags == undefined ? [] : probe.compilerFlags cpp.includePaths: probe.includePaths == undefined ? [] : probe.includePaths cpp.libraryPaths: probe.libraryPaths == undefined ? [] : probe.libraryPaths cpp.dynamicLibraries: probe.libraries == undefined ? [] : probe.libraries cpp.linkerFlags: probe.linkerFlags == undefined ? [] : probe.linkerFlags Probes.PkgConfigProbe { id: probe name: "umockdev-1.0" } } 07070100000015000081A400000000000000000000000161C8AFF6000002B4000000000000000000000000000000000000002B00000000qt5-qtudev-20211226+git.dfe043f/qtudev.qbsimport qbs 1.0 Project { name: "QtUDev" readonly property string version: "1.0.0" readonly property var versionParts: version.split('.').map(function(part) { return parseInt(part); }) readonly property string minimumQtVersion: "5.8.0" property bool useStaticAnalyzer: false property bool autotestEnabled: false property stringList autotestArguments: [] property stringList autotestWrapper: [] condition: qbs.targetOS.contains("linux") && !qbs.targetOS.contains("android") minimumQbsVersion: "1.9.0" qbsSearchPaths: ["qbs"] references: [ "src/deployment.qbs", "src/udev/udev.qbs", "tests/auto/auto.qbs", ] } 07070100000016000041ED00000000000000000000000361C8AFF600000000000000000000000000000000000000000000002400000000qt5-qtudev-20211226+git.dfe043f/src07070100000017000081A400000000000000000000000161C8AFF6000001AB000000000000000000000000000000000000003300000000qt5-qtudev-20211226+git.dfe043f/src/deployment.qbsimport qbs 1.0 Project { name: "Deployment" InstallPackage { name: "qtudev-artifacts" targetName: name builtByDefault: false archiver.type: "tar" archiver.outputDirectory: project.buildDirectory Depends { name: "Qt5Udev" } Depends { name: "Qt5Udev-pkgconfig" } Depends { name: "Qt5Udev-qbs" } Depends { productTypes: ["installable"] } } } 07070100000018000041ED00000000000000000000000261C8AFF600000000000000000000000000000000000000000000002900000000qt5-qtudev-20211226+git.dfe043f/src/udev07070100000019000081A400000000000000000000000161C8AFF6000002F0000000000000000000000000000000000000003800000000qt5-qtudev-20211226+git.dfe043f/src/udev/CMakeLists.txtfind_package(Libudev REQUIRED) liri_add_module(Qt5Udev DESCRIPTION "Qt style API for udev" MODULE_NAME Qt5Udev VERSIONED_MODULE_NAME Qt5Udev SOURCES logindseat.cpp logindseat_p.h udev.cpp udevdevice.cpp udevdevice.h udevdevice_p.h udevenumerate.cpp udevenumerate.h udevenumerate_p.h udev.h udevmonitor.cpp udevmonitor.h udevmonitor_p.h udev_p.h DEFINES QT_NO_CAST_FROM_ASCII QT_NO_FOREACH PUBLIC_LIBRARIES Qt5::Core LIBRARIES Qt5::DBus PkgConfig::Libudev PKGCONFIG_DEPENDENCIES Qt5Core libudev ) liri_finalize_module(Qt5Udev) 0707010000001A000081A400000000000000000000000161C8AFF6000020E4000000000000000000000000000000000000003800000000qt5-qtudev-20211226+git.dfe043f/src/udev/logindseat.cpp/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2019 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #include <QDBusConnection> #include <QDBusMetaType> #include <QDBusReply> #include "logindseat_p.h" #include "udev_p.h" #include <unistd.h> #include <sys/types.h> #define LOGIN1_SERVICE QStringLiteral("org.freedesktop.login1") #define LOGIN1_OBJECT QLatin1String("/org/freedesktop/login1") #define LOGIN1_MANAGER_INTERFACE QLatin1String("org.freedesktop.login1.Manager") #define LOGIN1_SEAT_INTERFACE QLatin1String("org.freedesktop.login1.Seat") #define LOGIN1_SESSION_INTERFACE QLatin1String("org.freedesktop.login1.Session") #define DBUS_SERVICE QLatin1String("org.freedesktop.DBus") #define DBUS_PROPERTIES_INTERFACE QLatin1String("org.freedesktop.DBus.Properties") LogindSeat::LogindSeat() { // Register custom types qDBusRegisterMetaType<DBusUserSession>(); qDBusRegisterMetaType<DBusUserSessionVector>(); qDBusRegisterMetaType<DBusSeat>(); DBusUserSession userSession; if (findActiveSession(userSession)) m_id = getSeatId(userSession.objectPath.path()); else qCWarning(lcUdev, "Failed to determine current seat, assuming default seat0"); } QString LogindSeat::id() const { return m_id; } bool LogindSeat::findActiveSession(DBusUserSession &userSession) const { auto bus = QDBusConnection::systemBus(); QDBusObjectPath userPath; { QVariantList args; args << ::getuid(); auto message = QDBusMessage::createMethodCall(LOGIN1_SERVICE, LOGIN1_OBJECT, LOGIN1_MANAGER_INTERFACE, QStringLiteral("GetUser")); message.setArguments(args); QDBusReply<QDBusObjectPath> reply = bus.call(message); if (!reply.isValid()) { qCWarning(lcUdev, "Failed to get user path: %s", qPrintable(reply.error().message())); return false; } userPath = reply.value(); } { QVariantList args; args << QStringLiteral("org.freedesktop.login1.User") << QStringLiteral("Sessions"); QDBusMessage message = QDBusMessage::createMethodCall(LOGIN1_SERVICE, userPath.path(), DBUS_PROPERTIES_INTERFACE, QStringLiteral("Get")); message.setArguments(args); QDBusReply<QVariant> reply = bus.call(message); if (!reply.isValid()) { qCWarning(lcUdev, "Failed to list user sessions: %s", qPrintable(reply.error().message())); return false; } // Find which session meets our critera QStringList validTypes = { QStringLiteral("tty"), QStringLiteral("wayland"), QStringLiteral("x11") }; // We expect to have only one session for each user, and the session for the current // user is supposed to be active because the user logged in with a login manager (either // text based such as getty, or graphical like SDDM). // Graphical login managers usually don't spawn a second session, but activate an already // existing session for the user. DBusUserSessionVector sessions = qdbus_cast<DBusUserSessionVector>(reply.value().value<QDBusArgument>()); for (const auto &curSession : qAsConst(sessions)) { const QString type = getSessionType(curSession.id, curSession.objectPath.path()); const QString state = getSessionState(curSession.id, curSession.objectPath.path()); if (!validTypes.contains(type)) continue; // We want the active session if (state == QStringLiteral("active")) { userSession = curSession; return true; } } } return false; } QString LogindSeat::getSessionType(const QString &sessionId, const QString &sessionPath) const { auto bus = QDBusConnection::systemBus(); QVariantList args; args << LOGIN1_SESSION_INTERFACE << QStringLiteral("Type"); auto message = QDBusMessage::createMethodCall(LOGIN1_SERVICE, sessionPath, DBUS_PROPERTIES_INTERFACE, QStringLiteral("Get")); message.setArguments(args); QDBusReply<QVariant> reply = bus.call(message); if (!reply.isValid()) { qCWarning(lcUdev, "Failed to get type for session %s: %s", qPrintable(sessionId), qPrintable(reply.error().message())); return QString(); } return reply.value().toString(); } QString LogindSeat::getSessionState(const QString &sessionId, const QString &sessionPath) const { auto bus = QDBusConnection::systemBus(); QVariantList args; args << LOGIN1_SESSION_INTERFACE << QStringLiteral("State"); auto message = QDBusMessage::createMethodCall(LOGIN1_SERVICE, sessionPath, DBUS_PROPERTIES_INTERFACE, QStringLiteral("Get")); message.setArguments(args); QDBusReply<QVariant> reply = bus.call(message); if (!reply.isValid()) { qCWarning(lcUdev, "Failed to get state for session %s: %s", qPrintable(sessionId), qPrintable(reply.error().message())); return QString(); } return reply.value().toString(); } QString LogindSeat::getSeatId(const QString &sessionPath) const { auto bus = QDBusConnection::systemBus(); QVariantList args; args << LOGIN1_SESSION_INTERFACE << QStringLiteral("Seat"); auto message = QDBusMessage::createMethodCall(LOGIN1_SERVICE, sessionPath, DBUS_PROPERTIES_INTERFACE, QStringLiteral("Get")); message.setArguments(args); QDBusReply<QVariant> reply = bus.call(message); if (!reply.isValid()) { qCWarning(lcUdev, "Failed to get seat from session path \"%s\": %s", qPrintable(sessionPath), qPrintable(reply.error().message())); return QString(); } const DBusSeat dbusSeat = qdbus_cast<DBusSeat>(reply.value().value<QDBusArgument>()); return dbusSeat.id; } QDBusArgument &operator<<(QDBusArgument &argument, const DBusUserSession &userSession) { argument.beginStructure(); argument << userSession.id << userSession.objectPath; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, DBusUserSession &userSession) { argument.beginStructure(); argument >> userSession.id >> userSession.objectPath; argument.endStructure(); return argument; } QDBusArgument &operator<<(QDBusArgument &argument, const DBusSeat &seat) { argument.beginStructure(); argument << seat.id << seat.objectPath; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, DBusSeat &seat) { argument.beginStructure(); argument >> seat.id >> seat.objectPath; argument.endStructure(); return argument; } 0707010000001B000081A400000000000000000000000161C8AFF60000088C000000000000000000000000000000000000003800000000qt5-qtudev-20211226+git.dfe043f/src/udev/logindseat_p.h/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2019 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #ifndef LOGINDSEAT_P_H #define LOGINDSEAT_P_H #include <QDBusArgument> #include <QVector> class DBusUserSession { public: QString id; QDBusObjectPath objectPath; }; Q_DECLARE_METATYPE(DBusUserSession) typedef QVector<DBusUserSession> DBusUserSessionVector; Q_DECLARE_METATYPE(DBusUserSessionVector) class DBusSeat { public: QString id; QDBusObjectPath objectPath; }; Q_DECLARE_METATYPE(DBusSeat) QDBusArgument &operator<<(QDBusArgument &argument, const DBusUserSession &userSession); const QDBusArgument &operator>>(const QDBusArgument &argument, DBusUserSession &userSession); QDBusArgument &operator<<(QDBusArgument &argument, const DBusSeat &seat); const QDBusArgument &operator>>(const QDBusArgument &argument, DBusSeat &seat); class LogindSeat { public: LogindSeat(); QString id() const; private: QString m_id = QStringLiteral("seat0"); bool findActiveSession(DBusUserSession &userSession) const; QString getSessionType(const QString &sessionId, const QString &sessionPath) const; QString getSessionState(const QString &sessionId, const QString &sessionPath) const; QString getSeatId(const QString &sessionPath) const; }; #endif // LOGINDSEAT_P_H 0707010000001C000081A400000000000000000000000161C8AFF6000004DE000000000000000000000000000000000000003800000000qt5-qtudev-20211226+git.dfe043f/src/udev/qtudevglobal.h/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #ifndef QTUDEVGLOBAL_H #define QTUDEVGLOBAL_H #include <QtCore/qglobal.h> #if defined(LIRI_BUILD_QTUDEV_LIB) # define QTUDEV_EXPORT Q_DECL_EXPORT #else # define QTUDEV_EXPORT Q_DECL_IMPORT #endif #define QTUDEV_NO_EXPORT Q_DECL_HIDDEN #endif // QTUDEVGLOBAL_H 0707010000001D000081A400000000000000000000000161C8AFF600000C03000000000000000000000000000000000000003200000000qt5-qtudev-20211226+git.dfe043f/src/udev/udev.cpp/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #include <qplatformdefs.h> #include "udev.h" #include "udev_p.h" #include "udevdevice.h" Q_LOGGING_CATEGORY(lcUdev, "qtudev") namespace QtUdev { /* * UdevPrivate */ UdevPrivate::UdevPrivate() { udev = udev_new(); if (!udev) qCWarning(lcUdev, "Unable to get udev library context: no devices can be detected"); } UdevPrivate::~UdevPrivate() { if (udev) udev_unref(udev); } UdevPrivate *UdevPrivate::get(Udev *u) { return u ? u->d_func() : nullptr; } /* * Udev */ Udev::Udev() : d_ptr(new UdevPrivate) { } Udev::~Udev() { delete d_ptr; } bool Udev::isValid() const { Q_D(const Udev); return d->udev; } UdevDevice *Udev::deviceFromFileName(const QString &fileName) const { Q_D(const Udev); if (!isValid()) return nullptr; QT_STATBUF sb; if (QT_STAT(qPrintable(fileName), &sb) != 0) return nullptr; udev_device *dev = nullptr; if (S_ISBLK(sb.st_mode)) dev = udev_device_new_from_devnum(d->udev, 'b', sb.st_rdev); else if (S_ISCHR(sb.st_mode)) dev = udev_device_new_from_devnum(d->udev, 'c', sb.st_rdev); if (!dev) return nullptr; UdevDevice *device = new UdevDevice; device->initialize(dev); return device; } UdevDevice *Udev::deviceFromSubSystemAndName(const QString &subSystem, const QString &name) const { Q_D(const Udev); if (!isValid()) return nullptr; udev_device *dev = udev_device_new_from_subsystem_sysname(d->udev, qPrintable(subSystem), qPrintable(name)); UdevDevice *device = new UdevDevice; device->initialize(dev); return device; } UdevDevice *Udev::deviceFromSysfsPath(const QString &sysfsPath) const { Q_D(const Udev); if (!isValid()) return nullptr; udev_device *dev = udev_device_new_from_syspath(d->udev, qPrintable(sysfsPath)); UdevDevice *device = new UdevDevice; device->initialize(dev); return device; } } // namespace QtUdev 0707010000001E000081A400000000000000000000000161C8AFF600000625000000000000000000000000000000000000003000000000qt5-qtudev-20211226+git.dfe043f/src/udev/udev.h/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #ifndef QTUDEV_H #define QTUDEV_H #include <QtCore/QString> #include <Qt5Udev/qt5udevglobal.h> namespace QtUdev { class UdevDevice; class UdevPrivate; class QT5UDEV_EXPORT Udev { Q_DECLARE_PRIVATE(Udev) public: Udev(); ~Udev(); bool isValid() const; UdevDevice *deviceFromFileName(const QString &fileName) const; UdevDevice *deviceFromSubSystemAndName(const QString &subSystem, const QString &name) const; UdevDevice *deviceFromSysfsPath(const QString &sysfsPath) const; private: UdevPrivate *const d_ptr; }; } // namespace QtUdev #endif // QTUDEV_H 0707010000001F000081A400000000000000000000000161C8AFF60000068D000000000000000000000000000000000000003200000000qt5-qtudev-20211226+git.dfe043f/src/udev/udev.qbsimport qbs 1.0 import LiriUtils LiriModuleProject { id: root name: "Qt5Udev" moduleName: "Qt5Udev" description: "Qt API for udev" pkgConfigDependencies: ["Qt5Core", "libudev"] createCMake: false resolvedProperties: ({ Depends: [{ name: LiriUtils.quote("Qt.core") }, { name: LiriUtils.quote("libudev") }], }) LiriHeaders { name: root.headersName sync.module: root.moduleName sync.classNames: ({ "udevdevice.h": ["UdevDevice"], "udevenumerate.h": ["UdevEnumerate"], "udev.h": ["Udev"], "udevmonitor.h": ["UdevMonitor"], }) Group { name: "Headers" files: "**/*.h" fileTags: ["hpp_syncable"] } } LiriModule { name: root.moduleName targetName: root.targetName version: "1.0.0" Depends { name: root.headersName } Depends { name: "Qt.core" versionAtLeast: project.minimumQtVersion } Depends { name: "libudev" } condition: { if (!libudev.found) { console.error("libudev is required to build " + targetName); return false; } return true; } cpp.defines: base.concat([ 'QTUDEV_VERSION="' + project.version + '"', "LIRI_BUILD_QTUDEV_LIB" ]) files: ["*.cpp", "*.h"] Export { Depends { name: "cpp" } Depends { name: root.headersName } Depends { name: "Qt.core" } Depends { name: "libudev" } } } } 07070100000020000081A400000000000000000000000161C8AFF60000065F000000000000000000000000000000000000003200000000qt5-qtudev-20211226+git.dfe043f/src/udev/udev_p.h/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #ifndef QTUDEV_P_H #define QTUDEV_P_H // // W A R N I N G // ------------- // // This file is not part of the QtUdev. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include <QLoggingCategory> #include <Qt5Udev/qt5udevglobal.h> extern "C" { #include <libudev.h> } Q_DECLARE_LOGGING_CATEGORY(lcUdev) namespace QtUdev { class Udev; class QT5UDEV_EXPORT UdevPrivate { public: UdevPrivate(); ~UdevPrivate(); static UdevPrivate *get(Udev *u); struct udev *udev; }; } // namespace QtUdev #endif // QTUDEV_P_H 07070100000021000081A400000000000000000000000161C8AFF6000018C2000000000000000000000000000000000000003800000000qt5-qtudev-20211226+git.dfe043f/src/udev/udevdevice.cpp/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #include <QDebug> #include "udev_p.h" #include "udevdevice.h" #include "udevdevice_p.h" namespace QtUdev { static inline QStringList listFromEntries(udev_list_entry *l) { QStringList list; udev_list_entry *entry; udev_list_entry_foreach(entry, l) { list.append(QString::fromUtf8(udev_list_entry_get_name(entry))); } return list; } /* * UdevDevicePrivate */ UdevDevicePrivate::UdevDevicePrivate() { } UdevDevicePrivate::~UdevDevicePrivate() { if (device) udev_device_unref(device); } /* * UdevDevice */ UdevDevice::UdevDevice() : d_ptr(new UdevDevicePrivate) { } UdevDevice::~UdevDevice() { delete d_ptr; } bool UdevDevice::isValid() const { Q_D(const UdevDevice); return d->device != nullptr; } UdevDevice::DeviceTypes UdevDevice::type() const { Q_D(const UdevDevice); DeviceTypes result; if (!d->device) return result; if (qstrcmp(udev_device_get_property_value(d->device, "ID_INPUT_KEYBOARD"), "1") == 0) result |= KeyboardDevice; if (qstrcmp(udev_device_get_property_value(d->device, "ID_INPUT_KEY"), "1") == 0) result |= KeyboardDevice; if (qstrcmp(udev_device_get_property_value(d->device, "ID_INPUT_MOUSE"), "1") == 0) result |= MouseDevice; if (qstrcmp(udev_device_get_property_value(d->device, "ID_INPUT_TOUCHPAD"), "1") == 0) result |= TouchpadDevice; if (qstrcmp(udev_device_get_property_value(d->device, "ID_INPUT_TOUCHSCREEN"), "1") == 0) result |= TouchscreenDevice; if (qstrcmp(udev_device_get_property_value(d->device, "ID_INPUT_TABLET"), "1") == 0) result |= TabletDevice; if (qstrcmp(udev_device_get_property_value(d->device, "ID_INPUT_JOYSTICK"), "1") == 0) result |= JoystickDevice; if (qstrcmp(udev_device_get_subsystem(d->device), "drm") == 0) { bool isSet = false; udev_device *pci = udev_device_get_parent_with_subsystem_devtype(d->device, "pci", nullptr); if (pci) { if (qstrcmp(udev_device_get_sysattr_value(pci, "boot_vga"), "1") == 0) { result |= PrimaryVideoDevice; isSet = true; } } if (!isSet) result |= GenericVideoDevice; } return result; } QString UdevDevice::subsystem() const { Q_D(const UdevDevice); if (!d->device) return QString(); return QString::fromUtf8(udev_device_get_subsystem(d->device)); } QString UdevDevice::devType() const { Q_D(const UdevDevice); if (!d->device) return QString(); return QString::fromUtf8(udev_device_get_devtype(d->device)); } QString UdevDevice::name() const { Q_D(const UdevDevice); if (!d->device) return QString(); return QString::fromUtf8(udev_device_get_sysname(d->device)); } QString UdevDevice::driver() const { Q_D(const UdevDevice); if (!d->device) return QString(); return QString::fromUtf8(udev_device_get_driver(d->device)); } QString UdevDevice::deviceNode() const { Q_D(const UdevDevice); if (!d->device) return QString(); return QString::fromUtf8(udev_device_get_devnode(d->device)); } QStringList UdevDevice::alternateDeviceSymlinks() const { Q_D(const UdevDevice); if (!d->device) return QStringList(); return listFromEntries(udev_device_get_devlinks_list_entry(d->device)); } QString UdevDevice::sysfsPath() const { Q_D(const UdevDevice); if (!d->device) return QString(); return QString::fromUtf8(udev_device_get_syspath(d->device)); } int UdevDevice::sysfsNumber() const { Q_D(const UdevDevice); if (!d->device) return -1; return QByteArray(udev_device_get_sysnum(d->device)).toInt(); } QString UdevDevice::property(const QString &name) const { Q_D(const UdevDevice); if (!d->device) return QString(); return QString::fromLatin1(udev_device_get_property_value(d->device, name.toLatin1().constData())); } bool UdevDevice::hasProperty(const QString &name) const { Q_D(const UdevDevice); if (!d->device) return false; return udev_device_get_property_value(d->device, name.toLatin1().constData()) != nullptr; } QStringList UdevDevice::deviceProperties() const { Q_D(const UdevDevice); if (!d->device) return QStringList(); return listFromEntries(udev_device_get_properties_list_entry(d->device)); } QStringList UdevDevice::sysfsProperties() const { Q_D(const UdevDevice); if (!d->device) return QStringList(); return listFromEntries(udev_device_get_sysattr_list_entry(d->device)); } UdevDevice *UdevDevice::parent() const { Q_D(const UdevDevice); if (!d->device) return nullptr; udev_device *p = udev_device_get_parent(d->device); if (p) { UdevDevice *parentDevice = new UdevDevice; parentDevice->d_ptr->device = p; return parentDevice; } return nullptr; } void UdevDevice::initialize(udev_device *dev) { Q_D(UdevDevice); d->device = dev; } QDebug operator<<(QDebug dbg, const UdevDevice &device) { QDebugStateSaver saver(dbg); if (device.isValid()) dbg.nospace() << "UdevDevice(" << device.deviceNode() << ')'; else dbg.nospace() << "Invalid UdevDevice)"; return dbg; } } // namespace QtUdev 07070100000022000081A400000000000000000000000161C8AFF600000AD9000000000000000000000000000000000000003600000000qt5-qtudev-20211226+git.dfe043f/src/udev/udevdevice.h/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #ifndef QTUDEVDEVICE_H #define QTUDEVDEVICE_H #include <QtCore/QObject> #include <Qt5Udev/qt5udevglobal.h> struct udev_device; namespace QtUdev { class Udev; class UdevEnumerate; class UdevDevicePrivate; class UdevMonitorPrivate; class QT5UDEV_EXPORT UdevDevice { Q_DECLARE_PRIVATE(UdevDevice) public: enum DeviceType { UnknownDevice = 0x00, KeyboardDevice = 0x01, MouseDevice = 0x02, TouchpadDevice = 0x04, TouchscreenDevice = 0x08, TabletDevice = 0x10, JoystickDevice = 0x20, GenericVideoDevice = 0x40, PrimaryVideoDevice = 0x80, InputDevice_Mask = KeyboardDevice | MouseDevice | TouchpadDevice | TouchscreenDevice | TabletDevice | JoystickDevice, VideoDevice_Mask = GenericVideoDevice }; Q_DECLARE_FLAGS(DeviceTypes, DeviceType) explicit UdevDevice(); ~UdevDevice(); bool isValid() const; DeviceTypes type() const; QString subsystem() const; QString devType() const; QString name() const; QString driver() const; QString deviceNode() const; QStringList alternateDeviceSymlinks() const; QString sysfsPath() const; int sysfsNumber() const; QString property(const QString &name) const; bool hasProperty(const QString &name) const; QStringList deviceProperties() const; QStringList sysfsProperties() const; UdevDevice *parent() const; private: void initialize(udev_device *dev); UdevDevicePrivate *const d_ptr; friend class Udev; friend class UdevEnumerate; friend class UdevMonitorPrivate; }; Q_DECLARE_OPERATORS_FOR_FLAGS(UdevDevice::DeviceTypes) QDebug operator<<(QDebug, const UdevDevice &); } // namespace QtUdev Q_DECLARE_METATYPE(QtUdev::UdevDevice) #endif // QTUDEVDEVICE_H 07070100000023000081A400000000000000000000000161C8AFF6000005E6000000000000000000000000000000000000003800000000qt5-qtudev-20211226+git.dfe043f/src/udev/udevdevice_p.h/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #ifndef QTUDEVDEVICE_P_H #define QTUDEVDEVICE_P_H // // W A R N I N G // ------------- // // This file is not part of the QtUdev. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // extern "C" { #include <libudev.h> } namespace QtUdev { class UdevDevicePrivate { public: UdevDevicePrivate(); ~UdevDevicePrivate(); udev_device *device = nullptr; }; } // namespace QtUdev #endif // QTUDEVDEVICE_P_H 07070100000024000081A400000000000000000000000161C8AFF600001631000000000000000000000000000000000000003B00000000qt5-qtudev-20211226+git.dfe043f/src/udev/udevenumerate.cpp/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #include "logindseat_p.h" #include "udev.h" #include "udev_p.h" #include "udevenumerate.h" #include "udevenumerate_p.h" namespace QtUdev { /* * UdevEnumeratePrivate */ UdevEnumeratePrivate::UdevEnumeratePrivate(UdevDevice::DeviceTypes t, Udev *u) : logindSeat(new LogindSeat) , types(t) , udev(u) { enumerate = udev_enumerate_new(UdevPrivate::get(u)->udev); if (!enumerate) { qCWarning(lcUdev, "Unable to enumerate connected devices"); return; } if (types.testFlag(UdevDevice::InputDevice_Mask)) udev_enumerate_add_match_subsystem(enumerate, "input"); if (types.testFlag(UdevDevice::VideoDevice_Mask)) { udev_enumerate_add_match_subsystem(enumerate, "drm"); udev_enumerate_add_match_sysname(enumerate, "card[0-9]*"); } if (types.testFlag(UdevDevice::KeyboardDevice)) { udev_enumerate_add_match_property(enumerate, "ID_INPUT_KEYBOARD", "1"); udev_enumerate_add_match_property(enumerate, "ID_INPUT_KEY", "1"); } if (types.testFlag(UdevDevice::MouseDevice)) udev_enumerate_add_match_property(enumerate, "ID_INPUT_MOUSE", "1"); if (types.testFlag(UdevDevice::TouchpadDevice)) udev_enumerate_add_match_property(enumerate, "ID_INPUT_TOUCHPAD", "1"); if (types.testFlag(UdevDevice::TouchscreenDevice)) udev_enumerate_add_match_property(enumerate, "ID_INPUT_TOUCHSCREEN", "1"); if (types.testFlag(UdevDevice::TabletDevice)) udev_enumerate_add_match_property(enumerate, "ID_INPUT_TABLET", "1"); if (types.testFlag(UdevDevice::JoystickDevice)) udev_enumerate_add_match_property(enumerate, "ID_INPUT_JOYSTICK", "1"); } UdevEnumeratePrivate::~UdevEnumeratePrivate() { if (enumerate) udev_enumerate_unref(enumerate); delete logindSeat; } /* * UdevEnumerate */ UdevEnumerate::UdevEnumerate(UdevDevice::DeviceTypes types, Udev *udev) : d_ptr(new UdevEnumeratePrivate(types, udev)) { qRegisterMetaType<UdevDevice>(); } UdevEnumerate::~UdevEnumerate() { delete d_ptr; } QList<UdevDevice *> UdevEnumerate::scan() const { Q_D(const UdevEnumerate); QList<UdevDevice *> list; if (!d->enumerate) return list; if (udev_enumerate_scan_devices(d->enumerate) != 0) { qCWarning(lcUdev, "Unable to enumerate connected devices"); return list; } udev_device *drmDevice = nullptr; udev_device *drmPrimaryDevice = nullptr; udev_list_entry *entry; udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(d->enumerate)) { const char *syspath = udev_list_entry_get_name(entry); udev_device *dev = udev_device_new_from_syspath(UdevPrivate::get(d->udev)->udev, syspath); if (!dev) continue; // Must be on the same seat QString seat = QString::fromUtf8(udev_device_get_property_value(dev, "ID_SEAT")); if (seat.isEmpty()) seat = QStringLiteral("seat0"); if (seat != d->logindSeat->id()) { udev_device_unref(dev); continue; } QString node = QString::fromUtf8(udev_device_get_devnode(dev)); if (d->types.testFlag(UdevDevice::InputDevice_Mask) && node.startsWith(QLatin1String("/dev/input/event"))) { UdevDevice *device = new UdevDevice; device->initialize(dev); list.append(device); } if (d->types.testFlag(UdevDevice::VideoDevice_Mask) && node.startsWith(QLatin1String("/dev/dri/card"))) { // We can have more than one DRM device on our seat, so the filter // might want us to pick up only the primary video device // In any case we'll be adding just one DRM device to the list if (d->types.testFlag(UdevDevice::PrimaryVideoDevice)) { udev_device *pci = udev_device_get_parent_with_subsystem_devtype(dev, "pci", nullptr); if (pci) { if (qstrcmp(udev_device_get_sysattr_value(pci, "boot_vga"), "1") == 0) drmPrimaryDevice = dev; } } if (!drmPrimaryDevice) { if (drmDevice) udev_device_unref(drmDevice); drmDevice = dev; } } } // Add any DRM device previously enumerated if (drmPrimaryDevice) { UdevDevice *device = new UdevDevice; device->initialize(drmPrimaryDevice); list.append(device); } else if (drmDevice) { UdevDevice *device = new UdevDevice; device->initialize(drmDevice); list.append(device); } return list; } } // namespace QtUdev 07070100000025000081A400000000000000000000000161C8AFF60000058F000000000000000000000000000000000000003900000000qt5-qtudev-20211226+git.dfe043f/src/udev/udevenumerate.h/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #ifndef QTUDEVENUMERATE_H #define QTUDEVENUMERATE_H #include <Qt5Udev/UdevDevice> namespace QtUdev { class UdevEnumeratePrivate; class QT5UDEV_EXPORT UdevEnumerate { Q_DECLARE_PRIVATE(UdevEnumerate) public: UdevEnumerate(UdevDevice::DeviceTypes types, Udev *udev); ~UdevEnumerate(); QList<UdevDevice *> scan() const; private: UdevEnumeratePrivate *const d_ptr; }; } // namespace QtUdev #endif // QTUDEVENUMERATE_H 07070100000026000081A400000000000000000000000161C8AFF600000699000000000000000000000000000000000000003B00000000qt5-qtudev-20211226+git.dfe043f/src/udev/udevenumerate_p.h/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #ifndef QTUDEVENUMERATE_P_H #define QTUDEVENUMERATE_P_H // // W A R N I N G // ------------- // // This file is not part of the QtUdev. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include "udevdevice.h" extern "C" { #include <libudev.h> } class LogindSeat; namespace QtUdev { class UdevEnumeratePrivate { public: UdevEnumeratePrivate(UdevDevice::DeviceTypes t, Udev *u); ~UdevEnumeratePrivate(); LogindSeat *logindSeat = nullptr; UdevDevice::DeviceTypes types; Udev *udev; udev_enumerate *enumerate; }; } // namespace QtUdev #endif // UDEVENUMERATE_P_H 07070100000027000081A400000000000000000000000161C8AFF600000E07000000000000000000000000000000000000003900000000qt5-qtudev-20211226+git.dfe043f/src/udev/udevmonitor.cpp/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #include <QSocketNotifier> #include "udev.h" #include "udev_p.h" #include "udevdevice.h" #include "udevmonitor.h" #include "udevmonitor_p.h" namespace QtUdev { /* * UdevMonitorPrivate */ UdevMonitorPrivate::UdevMonitorPrivate(UdevMonitor *qq, Udev *u) : udev(u) , monitor(nullptr) , q_ptr(qq) { monitor = udev_monitor_new_from_netlink(UdevPrivate::get(u)->udev, "udev"); if (!monitor) { qCWarning(lcUdev, "Unable to create an udev monitor: no devices can be detected"); return; } udev_monitor_enable_receiving(monitor); } UdevMonitorPrivate::~UdevMonitorPrivate() { if (monitor) udev_monitor_unref(monitor); } void UdevMonitorPrivate::_q_udevEventHandler() { Q_Q(UdevMonitor); udev_device *dev = udev_monitor_receive_device(monitor); if (!dev) return; const char *action = udev_device_get_action(dev); if (!action) { udev_device_unref(dev); return; } UdevDevice device; device.initialize(dev); if (strcmp(action, "add") == 0) Q_EMIT q->deviceAdded(device); else if (strcmp(action, "remove") == 0) Q_EMIT q->deviceRemoved(device); else if (strcmp(action, "change") == 0) Q_EMIT q->deviceChanged(device); else if (strcmp(action, "online") == 0) Q_EMIT q->deviceOnlined(device); else if (strcmp(action, "offline") == 0) Q_EMIT q->deviceOfflined(device); } /* * UdevMonitor */ UdevMonitor::UdevMonitor(Udev *udev, QObject *parent) : QObject(parent) , d_ptr(new UdevMonitorPrivate(this, udev)) { qRegisterMetaType<UdevDevice>(); Q_D(UdevMonitor); int fd = udev_monitor_get_fd(d->monitor); QSocketNotifier *notifier = new QSocketNotifier(fd, QSocketNotifier::Read, this); connect(notifier, SIGNAL(activated(int)), this, SLOT(_q_udevEventHandler())); } UdevMonitor::~UdevMonitor() { delete d_ptr; } bool UdevMonitor::isValid() const { Q_D(const UdevMonitor); return d->monitor; } void UdevMonitor::filterSubSystemDevType(const QString &subSystem, const QString &devType) { Q_D(UdevMonitor); if (!isValid()) return; udev_monitor_filter_add_match_subsystem_devtype(d->monitor, qPrintable(subSystem), qPrintable(devType)); } void UdevMonitor::filterTag(const QString &tag) { Q_D(UdevMonitor); if (!isValid()) return; udev_monitor_filter_add_match_tag(d->monitor, qPrintable(tag)); } } // namespace QtUdev #include "moc_udevmonitor.cpp" 07070100000028000081A400000000000000000000000161C8AFF6000007B5000000000000000000000000000000000000003700000000qt5-qtudev-20211226+git.dfe043f/src/udev/udevmonitor.h/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #ifndef QTUDEVMONITOR_H #define QTUDEVMONITOR_H #include <QtCore/QObject> #include <Qt5Udev/qt5udevglobal.h> namespace QtUdev { class Udev; class UdevDevice; class UdevMonitorPrivate; class QT5UDEV_EXPORT UdevMonitor : public QObject { Q_OBJECT Q_DECLARE_PRIVATE(UdevMonitor) public: explicit UdevMonitor(Udev *udev, QObject *parent = nullptr); ~UdevMonitor(); bool isValid() const; void filterSubSystemDevType(const QString &subSystem, const QString &devType); void filterTag(const QString &tag); Q_SIGNALS: void deviceAdded(const QtUdev::UdevDevice &device); void deviceRemoved(const QtUdev::UdevDevice &device); void deviceChanged(const QtUdev::UdevDevice &device); void deviceOnlined(const QtUdev::UdevDevice &device); void deviceOfflined(const QtUdev::UdevDevice &device); private: UdevMonitorPrivate *const d_ptr; Q_PRIVATE_SLOT(d_func(), void _q_udevEventHandler()) }; } // namespace QtUdev #endif // QTUDEVMONITOR_H 07070100000029000081A400000000000000000000000161C8AFF60000066F000000000000000000000000000000000000003900000000qt5-qtudev-20211226+git.dfe043f/src/udev/udevmonitor_p.h/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:LGPLv3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #ifndef QTUDEVMONITOR_P_H #define QTUDEVMONITOR_P_H // // W A R N I N G // ------------- // // This file is not part of the QtUdev. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include "udevmonitor.h" namespace QtUdev { class UdevMonitorPrivate { Q_DECLARE_PUBLIC(UdevMonitor) public: UdevMonitorPrivate(UdevMonitor *qq, Udev *u); ~UdevMonitorPrivate(); void _q_udevEventHandler(); Udev *udev; struct udev_monitor *monitor; protected: UdevMonitor *q_ptr; }; } // namespace QtUdev #endif // QTUDEVMONITOR_P_H 0707010000002A000041ED00000000000000000000000361C8AFF600000000000000000000000000000000000000000000002600000000qt5-qtudev-20211226+git.dfe043f/tests0707010000002B000041ED00000000000000000000000361C8AFF600000000000000000000000000000000000000000000002B00000000qt5-qtudev-20211226+git.dfe043f/tests/auto0707010000002C000081A400000000000000000000000161C8AFF60000035B000000000000000000000000000000000000003400000000qt5-qtudev-20211226+git.dfe043f/tests/auto/auto.qbsimport qbs 1.0 import qbs.FileInfo Project { name: "Autotests" references: [ "udev/udev.qbs", ] AutotestRunner { Depends { name: "lirideployment" } builtByDefault: project.autotestEnabled name: "qtudev-autotest" arguments: project.autotestArguments wrapper: project.autotestWrapper environment: { var env = base; env.push("LD_LIBRARY_PATH=" + FileInfo.joinPaths(qbs.installRoot, qbs.installPrefix, lirideployment.libDir)); var found = false; for (var i in env) { if (env[i].startsWith("XDG_RUNTIME_DIR=")) { found = true; break; } } if (!found) env.push("XDG_RUNTIME_DIR=/tmp"); return env; } } } 0707010000002D000041ED00000000000000000000000261C8AFF600000000000000000000000000000000000000000000003000000000qt5-qtudev-20211226+git.dfe043f/tests/auto/udev0707010000002E000081A400000000000000000000000161C8AFF6000000C0000000000000000000000000000000000000003F00000000qt5-qtudev-20211226+git.dfe043f/tests/auto/udev/CMakeLists.txtfind_package(Umockdev REQUIRED) liri_add_test(tst_qtudev SOURCES tst_udev.cpp DEFINES QT_NO_KEYWORDS LIBRARIES Liri::Qt5Udev PkgConfig::Umockdev ) 0707010000002F000081A400000000000000000000000161C8AFF60000FF60000000000000000000000000000000000000003E00000000qt5-qtudev-20211226+git.dfe043f/tests/auto/udev/test.umockdevP: /devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda N: sda S: disk/by-id/ata-TOSHIBA_MQ01ABD100_Y49DSZAOS S: disk/by-id/wwn-0x50000395e5c02a10 S: disk/by-path/pci-0000:00:1f.2-ata-1 E: DEVLINKS=/dev/disk/by-path/pci-0000:00:1f.2-ata-1 /dev/disk/by-id/ata-TOSHIBA_MQ01ABD100_Y49DSZAOS /dev/disk/by-id/wwn-0x50000395e5c02a10 E: DEVNAME=/dev/sda E: DEVTYPE=disk E: ID_ATA=1 E: ID_ATA_DOWNLOAD_MICROCODE=1 E: ID_ATA_FEATURE_SET_APM=1 E: ID_ATA_FEATURE_SET_APM_CURRENT_VALUE=128 E: ID_ATA_FEATURE_SET_APM_ENABLED=1 E: ID_ATA_FEATURE_SET_HPA=1 E: ID_ATA_FEATURE_SET_HPA_ENABLED=1 E: ID_ATA_FEATURE_SET_PM=1 E: ID_ATA_FEATURE_SET_PM_ENABLED=1 E: ID_ATA_FEATURE_SET_SECURITY=1 E: ID_ATA_FEATURE_SET_SECURITY_ENABLED=0 E: ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN=224 E: ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN=224 E: ID_ATA_FEATURE_SET_SECURITY_FROZEN=1 E: ID_ATA_FEATURE_SET_SMART=1 E: ID_ATA_FEATURE_SET_SMART_ENABLED=1 E: ID_ATA_ROTATION_RATE_RPM=5400 E: ID_ATA_SATA=1 E: ID_ATA_SATA_SIGNAL_RATE_GEN1=1 E: ID_ATA_SATA_SIGNAL_RATE_GEN2=1 E: ID_ATA_WRITE_CACHE=1 E: ID_ATA_WRITE_CACHE_ENABLED=1 E: ID_BUS=ata E: ID_MODEL=TOSHIBA_MQ01ABD100 E: ID_MODEL_ENC=TOSHIBA\x20MQ01ABD100\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 E: ID_PART_TABLE_TYPE=gpt E: ID_PART_TABLE_UUID=d23e23f6-f908-40ff-a350-43fd812e104e E: ID_PATH=pci-0000:00:1f.2-ata-1 E: ID_PATH_TAG=pci-0000_00_1f_2-ata-1 E: ID_REVISION=AX001U E: ID_SERIAL=TOSHIBA_MQ01ABD100_Y49DSZAOS E: ID_SERIAL_SHORT=Y49DSZAOS E: ID_TYPE=disk E: ID_WWN=0x50000395e5c02a10 E: ID_WWN_WITH_EXTENSION=0x50000395e5c02a10 E: MAJOR=8 E: MINOR=0 E: SUBSYSTEM=block E: TAGS=:systemd: A: alignment_offset=0 L: bdi=../../../../../../../../virtual/bdi/8:0 A: capability=50 A: dev=8:0 L: device=../../../0:0:0:0 A: discard_alignment=0 A: events= A: events_async= A: events_poll_msecs=-1 A: ext_range=256 A: hidden=0 A: inflight= 0 0 A: integrity/device_is_integrity_capable=0 A: integrity/format=none A: integrity/protection_interval_bytes=0 A: integrity/read_verify=0 A: integrity/tag_size=0 A: integrity/write_generate=0 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: queue/add_random=1 A: queue/chunk_sectors=0 A: queue/dax=0 A: queue/discard_granularity=0 A: queue/discard_max_bytes=0 A: queue/discard_max_hw_bytes=0 A: queue/discard_zeroes_data=0 A: queue/hw_sector_size=512 A: queue/io_poll=0 A: queue/io_poll_delay=0 A: queue/iostats=1 A: queue/logical_block_size=512 A: queue/max_discard_segments=1 A: queue/max_hw_sectors_kb=32767 A: queue/max_integrity_segments=0 A: queue/max_sectors_kb=1280 A: queue/max_segment_size=65536 A: queue/max_segments=168 A: queue/minimum_io_size=4096 A: queue/nomerges=0 A: queue/nr_requests=128 A: queue/optimal_io_size=0 A: queue/physical_block_size=4096 A: queue/read_ahead_kb=128 A: queue/rotational=1 A: queue/rq_affinity=1 A: queue/scheduler=noop deadline [cfq] A: queue/write_cache=write back A: queue/write_same_max_bytes=0 A: queue/write_zeroes_max_bytes=0 A: queue/zoned=none A: range=16 A: removable=0 A: ro=0 A: size=1953525168 A: stat= 67814 16612 2621625 756732 106843 407838 16775037 16454374 0 748962 17294725 A: trace/act_mask=disabled A: trace/enable=0 A: trace/end_lba=disabled A: trace/pid=disabled A: trace/start_lba=disabled P: /devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0 E: DEVTYPE=scsi_device E: DRIVER=sd E: MODALIAS=scsi:t-0x00 E: SUBSYSTEM=scsi A: blacklist= A: device_blocked=0 A: device_busy=0 A: dh_state=detached L: driver=../../../../../../../bus/scsi/drivers/sd A: eh_timeout=10 A: evt_capacity_change_reported=0 A: evt_inquiry_change_reported=0 A: evt_lun_change_reported=0 A: evt_media_change=0 A: evt_mode_parameter_change_reported=0 A: evt_soft_threshold_reached=0 L: generic=scsi_generic/sg0 H: inquiry=000005025B0000024154412020202020544F5348494241204D5130314142443131552020000000000000000000000000000000000000000000000060032003000000000000000000000000000000000000000000000000000000000000000000 A: iocounterbits=32 A: iodone_cnt=0x2c080 A: ioerr_cnt=0x90 A: iorequest_cnt=0x2ccc8 A: modalias=scsi:t-0x00 A: model=TOSHIBA MQ01ABD1 A: ncq_prio_enable=0 A: power/autosuspend_delay_ms=-1 A: power/control=on A: power/runtime_active_time=16246511 A: power/runtime_status=active A: power/runtime_suspended_time=0 A: queue_depth=31 A: queue_ramp_up_period=120000 A: queue_type=simple A: rev=1U A: scsi_level=6 A: state=running A: timeout=30 A: type=0 A: unload_heads=0 A: vendor=ATA H: vpd_pg80=00800014202020202020202020202059343944535A414F53 H: vpd_pg83=0083006C02000014202020202020202020202059343944535A414F53020100444154412020202020544F5348494241204D51303141424431303020202020202020202020202020202020202020202020202020202020202020202059343944535A414F530103000850000395E5C02A10 A: wwid=t10.ATA TOSHIBA MQ01ABD100 Y49DSZAOS P: /devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0 E: DEVTYPE=scsi_target E: SUBSYSTEM=scsi A: power/control=auto A: power/runtime_active_time=16246523 A: power/runtime_status=active A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:1f.2/ata1/host0 E: DEVTYPE=scsi_host E: SUBSYSTEM=scsi A: power/control=auto A: power/runtime_active_time=16246534 A: power/runtime_status=active A: power/runtime_suspended_time=344 P: /devices/pci0000:00/0000:00:1f.2 E: DRIVER=ahci E: ID_MODEL_FROM_DATABASE=Wildcat Point-LP SATA Controller [AHCI Mode] E: ID_PCI_CLASS_FROM_DATABASE=Mass storage controller E: ID_PCI_INTERFACE_FROM_DATABASE=AHCI 1.0 E: ID_PCI_SUBCLASS_FROM_DATABASE=SATA controller E: ID_VENDOR_FROM_DATABASE=Intel Corporation E: MODALIAS=pci:v00008086d00009C83sv00008086sd00002057bc01sc06i01 E: PCI_CLASS=10601 E: PCI_ID=8086:9C83 E: PCI_SLOT_NAME=0000:00:1f.2 E: PCI_SUBSYS_ID=8086:2057 E: SUBSYSTEM=pci A: ari_enabled=0 A: broken_parity_status=0 A: class=0x010601 H: config=8680839C0704B0020301060100000000D1F00000C1F00000B1F00000A1F0000061F00000009013F70000000086805720000000008000000000000000FF020000 A: consistent_dma_mask_bits=64 A: d3cold_allowed=1 A: device=0x9c83 A: dma_mask_bits=64 L: driver=../../../bus/pci/drivers/ahci A: driver_override=(null) A: enable=1 A: irq=44 A: local_cpulist=0-3 A: local_cpus=f A: modalias=pci:v00008086d00009C83sv00008086sd00002057bc01sc06i01 A: msi_bus=1 A: msi_irqs/44=msi A: numa_node=-1 A: power/control=on A: power/runtime_active_time=16247312 A: power/runtime_status=active A: power/runtime_suspended_time=0 A: power/wakeup=disabled A: power/wakeup_abort_count= A: power/wakeup_active= A: power/wakeup_active_count= A: power/wakeup_count= A: power/wakeup_expire_count= A: power/wakeup_last_time_ms= A: power/wakeup_max_time_ms= A: power/wakeup_total_time_ms= A: resource=0x000000000000f0d0 0x000000000000f0d7 0x0000000000040101\n0x000000000000f0c0 0x000000000000f0c3 0x0000000000040101\n0x000000000000f0b0 0x000000000000f0b7 0x0000000000040101\n0x000000000000f0a0 0x000000000000f0a3 0x0000000000040101\n0x000000000000f060 0x000000000000f07f 0x0000000000040101\n0x00000000f7139000 0x00000000f71397ff 0x0000000000040200\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000 A: revision=0x03 A: subsystem_device=0x2057 A: subsystem_vendor=0x8086 A: vendor=0x8086 P: /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input0/event0 N: input/event0 E: DEVNAME=/dev/input/event0 E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_PATH=acpi-PNP0C0E:00 E: ID_PATH_TAG=acpi-PNP0C0E_00 E: LIBINPUT_DEVICE_GROUP=19/0/3:PNP0C0E/button E: MAJOR=13 E: MINOR=64 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:64 L: device=../../input0 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input0 E: EV=3 E: ID_FOR_SEAT=input-acpi-PNP0C0E_00 E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_PATH=acpi-PNP0C0E:00 E: ID_PATH_TAG=acpi-PNP0C0E_00 E: KEY=4000 0 0 E: MODALIAS=input:b0019v0000p0003e0000-e0,1,k8E,ramlsfw E: NAME="Sleep Button" E: PHYS="PNP0C0E/button/input0" E: PRODUCT=19/0/3/0 E: PROP=0 E: SUBSYSTEM=input E: TAGS=:seat: A: capabilities/abs=0 A: capabilities/ev=3 A: capabilities/ff=0 A: capabilities/key=4000 0 0 A: capabilities/led=0 A: capabilities/msc=0 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=0 L: device=../../../PNP0C0E:00 A: id/bustype=0019 A: id/product=0003 A: id/vendor=0000 A: id/version=0000 A: modalias=input:b0019v0000p0003e0000-e0,1,k8E,ramlsfw A: name=Sleep Button A: phys=PNP0C0E/button/input0 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00 E: DRIVER=button E: ID_VENDOR_FROM_DATABASE=The Linux Foundation E: MODALIAS=acpi:PNP0C0E: E: SUBSYSTEM=acpi L: driver=../../../../bus/acpi/drivers/button A: hid=PNP0C0E A: modalias=acpi:PNP0C0E: A: path=\\_SB_.SLPB L: physical_node=../../../platform/PNP0C0E:00 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: power/wakeup=enabled A: power/wakeup_abort_count=0 A: power/wakeup_active=0 A: power/wakeup_active_count=0 A: power/wakeup_count=0 A: power/wakeup_expire_count=0 A: power/wakeup_last_time_ms=456 A: power/wakeup_max_time_ms=0 A: power/wakeup_total_time_ms=0 A: status=11 P: /devices/LNXSYSTM:00/LNXSYBUS:00 E: ID_VENDOR_FROM_DATABASE=The Linux Foundation E: MODALIAS=acpi:LNXSYBUS: E: SUBSYSTEM=acpi A: hid=LNXSYBUS A: modalias=acpi:LNXSYBUS: A: path=\\_SB_ A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/LNXSYSTM:00 E: ID_VENDOR_FROM_DATABASE=The Linux Foundation E: MODALIAS=acpi:LNXSYSTM: E: SUBSYSTEM=acpi A: hid=LNXSYSTM A: modalias=acpi:LNXSYSTM: A: path=\\ A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1/event1 N: input/event1 E: DEVNAME=/dev/input/event1 E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_PATH=acpi-PNP0C0C:00 E: ID_PATH_TAG=acpi-PNP0C0C_00 E: LIBINPUT_DEVICE_GROUP=19/0/1:PNP0C0C/button E: MAJOR=13 E: MINOR=65 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:65 L: device=../../input1 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1 E: EV=3 E: ID_FOR_SEAT=input-acpi-PNP0C0C_00 E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_PATH=acpi-PNP0C0C:00 E: ID_PATH_TAG=acpi-PNP0C0C_00 E: KEY=10000000000000 0 E: MODALIAS=input:b0019v0000p0001e0000-e0,1,k74,ramlsfw E: NAME="Power Button" E: PHYS="PNP0C0C/button/input0" E: PRODUCT=19/0/1/0 E: PROP=0 E: SUBSYSTEM=input E: TAGS=:seat: A: capabilities/abs=0 A: capabilities/ev=3 A: capabilities/ff=0 A: capabilities/key=10000000000000 0 A: capabilities/led=0 A: capabilities/msc=0 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=0 L: device=../../../PNP0C0C:00 A: id/bustype=0019 A: id/product=0001 A: id/vendor=0000 A: id/version=0000 A: modalias=input:b0019v0000p0001e0000-e0,1,k74,ramlsfw A: name=Power Button A: phys=PNP0C0C/button/input0 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00 E: DRIVER=button E: ID_VENDOR_FROM_DATABASE=The Linux Foundation E: MODALIAS=acpi:PNP0C0C: E: SUBSYSTEM=acpi L: driver=../../../../bus/acpi/drivers/button A: hid=PNP0C0C A: modalias=acpi:PNP0C0C: A: path=\\_SB_.PWRB L: physical_node=../../../platform/PNP0C0C:00 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: power/wakeup=enabled A: power/wakeup_abort_count=0 A: power/wakeup_active=0 A: power/wakeup_active_count=0 A: power/wakeup_count=0 A: power/wakeup_expire_count=0 A: power/wakeup_last_time_ms=456 A: power/wakeup_max_time_ms=0 A: power/wakeup_total_time_ms=0 A: status=15 P: /devices/pci0000:00/0000:00:03.0/sound/card0/input11/event10 N: input/event10 E: DEVNAME=/dev/input/event10 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:03.0 E: ID_PATH_TAG=pci-0000_00_03_0 E: LIBINPUT_DEVICE_GROUP=0/0/0:ALSA E: MAJOR=13 E: MINOR=74 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:74 L: device=../../input11 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:03.0/sound/card0/input11 E: EV=21 E: ID_FOR_SEAT=input-pci-0000_00_03_0 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:03.0 E: ID_PATH_TAG=pci-0000_00_03_0 E: MODALIAS=input:b0000v0000p0000e0000-e0,5,kramlsfw6,8, E: NAME="HDA Intel HDMI HDMI/DP,pcm=8" E: PHYS="ALSA" E: PRODUCT=0/0/0/0 E: PROP=0 E: SUBSYSTEM=input E: SW=140 E: TAGS=:seat: A: capabilities/abs=0 A: capabilities/ev=21 A: capabilities/ff=0 A: capabilities/key=0 A: capabilities/led=0 A: capabilities/msc=0 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=140 L: device=../../card0 A: id/bustype=0000 A: id/product=0000 A: id/vendor=0000 A: id/version=0000 A: modalias=input:b0000v0000p0000e0000-e0,5,kramlsfw6,8, A: name=HDA Intel HDMI HDMI/DP,pcm=8 A: phys=ALSA A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/pci0000:00/0000:00:03.0/sound/card0 E: ID_BUS=pci E: ID_FOR_SEAT=sound-pci-0000_00_03_0 E: ID_MODEL_FROM_DATABASE=Broadwell-U Audio Controller E: ID_MODEL_ID=0x160c E: ID_PATH=pci-0000:00:03.0 E: ID_PATH_TAG=pci-0000_00_03_0 E: ID_PCI_CLASS_FROM_DATABASE=Multimedia controller E: ID_PCI_SUBCLASS_FROM_DATABASE=Audio device E: ID_VENDOR_FROM_DATABASE=Intel Corporation E: ID_VENDOR_ID=0x8086 E: SOUND_FORM_FACTOR=internal E: SOUND_INITIALIZED=1 E: SUBSYSTEM=sound E: SYSTEMD_WANTS=sound.target E: TAGS=:systemd:seat: L: device=../../../0000:00:03.0 A: id=HDMI A: number=0 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:03.0 E: DRIVER=snd_hda_intel E: ID_MODEL_FROM_DATABASE=Broadwell-U Audio Controller E: ID_PCI_CLASS_FROM_DATABASE=Multimedia controller E: ID_PCI_SUBCLASS_FROM_DATABASE=Audio device E: ID_VENDOR_FROM_DATABASE=Intel Corporation E: MODALIAS=pci:v00008086d0000160Csv00008086sd00002057bc04sc03i00 E: PCI_CLASS=40300 E: PCI_ID=8086:160C E: PCI_SLOT_NAME=0000:00:03.0 E: PCI_SUBSYS_ID=8086:2057 E: SUBSYSTEM=pci A: ari_enabled=0 A: broken_parity_status=0 A: class=0x040300 H: config=86800C16060410000900030410000000044013F700000000000000000000000000000000000000000000000086805720000000005000000000000000FF010000 A: consistent_dma_mask_bits=64 A: current_link_speed=Unknown speed A: current_link_width=0 A: d3cold_allowed=1 A: device=0x160c A: dma_mask_bits=64 L: driver=../../../bus/pci/drivers/snd_hda_intel A: driver_override=(null) A: enable=1 A: irq=50 A: local_cpulist=0-3 A: local_cpus=f A: max_link_speed=Unknown speed A: max_link_width=0 A: modalias=pci:v00008086d0000160Csv00008086sd00002057bc04sc03i00 A: msi_bus=1 A: msi_irqs/50=msi A: numa_node=-1 A: power/control=on A: power/runtime_active_time=16247383 A: power/runtime_status=active A: power/runtime_suspended_time=0 A: resource=0x00000000f7134000 0x00000000f7137fff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000 A: revision=0x09 A: subsystem_device=0x2057 A: subsystem_vendor=0x8086 A: vendor=0x8086 P: /devices/pci0000:00/0000:00:03.0/sound/card0/input12/event11 N: input/event11 E: DEVNAME=/dev/input/event11 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:03.0 E: ID_PATH_TAG=pci-0000_00_03_0 E: LIBINPUT_DEVICE_GROUP=0/0/0:ALSA E: MAJOR=13 E: MINOR=75 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:75 L: device=../../input12 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:03.0/sound/card0/input12 E: EV=21 E: ID_FOR_SEAT=input-pci-0000_00_03_0 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:03.0 E: ID_PATH_TAG=pci-0000_00_03_0 E: MODALIAS=input:b0000v0000p0000e0000-e0,5,kramlsfw6,8, E: NAME="HDA Intel HDMI HDMI/DP,pcm=9" E: PHYS="ALSA" E: PRODUCT=0/0/0/0 E: PROP=0 E: SUBSYSTEM=input E: SW=140 E: TAGS=:seat: A: capabilities/abs=0 A: capabilities/ev=21 A: capabilities/ff=0 A: capabilities/key=0 A: capabilities/led=0 A: capabilities/msc=0 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=140 L: device=../../card0 A: id/bustype=0000 A: id/product=0000 A: id/vendor=0000 A: id/version=0000 A: modalias=input:b0000v0000p0000e0000-e0,5,kramlsfw6,8, A: name=HDA Intel HDMI HDMI/DP,pcm=9 A: phys=ALSA A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/pci0000:00/0000:00:03.0/sound/card0/input13/event12 N: input/event12 E: DEVNAME=/dev/input/event12 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:03.0 E: ID_PATH_TAG=pci-0000_00_03_0 E: LIBINPUT_DEVICE_GROUP=0/0/0:ALSA E: MAJOR=13 E: MINOR=76 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:76 L: device=../../input13 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:03.0/sound/card0/input13 E: EV=21 E: ID_FOR_SEAT=input-pci-0000_00_03_0 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:03.0 E: ID_PATH_TAG=pci-0000_00_03_0 E: MODALIAS=input:b0000v0000p0000e0000-e0,5,kramlsfw6,8, E: NAME="HDA Intel HDMI HDMI/DP,pcm=10" E: PHYS="ALSA" E: PRODUCT=0/0/0/0 E: PROP=0 E: SUBSYSTEM=input E: SW=140 E: TAGS=:seat: A: capabilities/abs=0 A: capabilities/ev=21 A: capabilities/ff=0 A: capabilities/key=0 A: capabilities/led=0 A: capabilities/msc=0 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=140 L: device=../../card0 A: id/bustype=0000 A: id/product=0000 A: id/vendor=0000 A: id/version=0000 A: modalias=input:b0000v0000p0000e0000-e0,5,kramlsfw6,8, A: name=HDA Intel HDMI HDMI/DP,pcm=10 A: phys=ALSA A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/pci0000:00/0000:00:1b.0/sound/card1/input14/event13 N: input/event13 E: DEVNAME=/dev/input/event13 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:1b.0 E: ID_PATH_TAG=pci-0000_00_1b_0 E: LIBINPUT_DEVICE_GROUP=0/0/0:ALSA E: MAJOR=13 E: MINOR=77 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:77 L: device=../../input14 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:1b.0/sound/card1/input14 E: EV=21 E: ID_FOR_SEAT=input-pci-0000_00_1b_0 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:1b.0 E: ID_PATH_TAG=pci-0000_00_1b_0 E: MODALIAS=input:b0000v0000p0000e0000-e0,5,kramlsfw4, E: NAME="HDA Intel PCH Mic" E: PHYS="ALSA" E: PRODUCT=0/0/0/0 E: PROP=0 E: SUBSYSTEM=input E: SW=10 E: TAGS=:seat: A: capabilities/abs=0 A: capabilities/ev=21 A: capabilities/ff=0 A: capabilities/key=0 A: capabilities/led=0 A: capabilities/msc=0 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=10 L: device=../../card1 A: id/bustype=0000 A: id/product=0000 A: id/vendor=0000 A: id/version=0000 A: modalias=input:b0000v0000p0000e0000-e0,5,kramlsfw4, A: name=HDA Intel PCH Mic A: phys=ALSA A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/pci0000:00/0000:00:1b.0/sound/card1 E: ID_BUS=pci E: ID_FOR_SEAT=sound-pci-0000_00_1b_0 E: ID_MODEL_FROM_DATABASE=Wildcat Point-LP High Definition Audio Controller E: ID_MODEL_ID=0x9ca0 E: ID_PATH=pci-0000:00:1b.0 E: ID_PATH_TAG=pci-0000_00_1b_0 E: ID_PCI_CLASS_FROM_DATABASE=Multimedia controller E: ID_PCI_SUBCLASS_FROM_DATABASE=Audio device E: ID_VENDOR_FROM_DATABASE=Intel Corporation E: ID_VENDOR_ID=0x8086 E: SOUND_FORM_FACTOR=internal E: SOUND_INITIALIZED=1 E: SUBSYSTEM=sound E: SYSTEMD_WANTS=sound.target E: TAGS=:systemd:seat: L: device=../../../0000:00:1b.0 A: id=PCH A: number=1 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:1b.0 E: DRIVER=snd_hda_intel E: ID_MODEL_FROM_DATABASE=Wildcat Point-LP High Definition Audio Controller E: ID_PCI_CLASS_FROM_DATABASE=Multimedia controller E: ID_PCI_SUBCLASS_FROM_DATABASE=Audio device E: ID_VENDOR_FROM_DATABASE=Intel Corporation E: MODALIAS=pci:v00008086d00009CA0sv00008086sd00002057bc04sc03i00 E: PCI_CLASS=40300 E: PCI_ID=8086:9CA0 E: PCI_SLOT_NAME=0000:00:1b.0 E: PCI_SUBSYS_ID=8086:2057 E: SUBSYSTEM=pci A: ari_enabled=0 A: broken_parity_status=0 A: class=0x040300 H: config=8680A09C060410000300030410200000040013F700000000000000000000000000000000000000000000000086805720000000005000000000000000FF010000 A: consistent_dma_mask_bits=64 A: d3cold_allowed=1 A: device=0x9ca0 A: dma_mask_bits=64 L: driver=../../../bus/pci/drivers/snd_hda_intel A: driver_override=(null) A: enable=1 A: index=1 A: irq=49 A: label= CIR Device A: local_cpulist=0-3 A: local_cpus=f A: modalias=pci:v00008086d00009CA0sv00008086sd00002057bc04sc03i00 A: msi_bus=1 A: msi_irqs/49=msi A: numa_node=-1 A: power/control=on A: power/runtime_active_time=16247428 A: power/runtime_status=active A: power/runtime_suspended_time=0 A: power/wakeup=disabled A: power/wakeup_abort_count= A: power/wakeup_active= A: power/wakeup_active_count= A: power/wakeup_count= A: power/wakeup_expire_count= A: power/wakeup_last_time_ms= A: power/wakeup_max_time_ms= A: power/wakeup_total_time_ms= A: resource=0x00000000f7130000 0x00000000f7133fff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000 A: revision=0x03 A: subsystem_device=0x2057 A: subsystem_vendor=0x8086 A: vendor=0x8086 P: /devices/pci0000:00/0000:00:1b.0/sound/card1/input15/event14 N: input/event14 E: DEVNAME=/dev/input/event14 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:1b.0 E: ID_PATH_TAG=pci-0000_00_1b_0 E: LIBINPUT_DEVICE_GROUP=0/0/0:ALSA E: MAJOR=13 E: MINOR=78 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:78 L: device=../../input15 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:1b.0/sound/card1/input15 E: EV=21 E: ID_FOR_SEAT=input-pci-0000_00_1b_0 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:1b.0 E: ID_PATH_TAG=pci-0000_00_1b_0 E: MODALIAS=input:b0000v0000p0000e0000-e0,5,kramlsfw2, E: NAME="HDA Intel PCH Headphone" E: PHYS="ALSA" E: PRODUCT=0/0/0/0 E: PROP=0 E: SUBSYSTEM=input E: SW=4 E: TAGS=:seat: A: capabilities/abs=0 A: capabilities/ev=21 A: capabilities/ff=0 A: capabilities/key=0 A: capabilities/led=0 A: capabilities/msc=0 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=4 L: device=../../card1 A: id/bustype=0000 A: id/product=0000 A: id/vendor=0000 A: id/version=0000 A: modalias=input:b0000v0000p0000e0000-e0,5,kramlsfw2, A: name=HDA Intel PCH Headphone A: phys=ALSA A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2/event2 N: input/event2 E: DEVNAME=/dev/input/event2 E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_PATH=acpi-LNXPWRBN:00 E: ID_PATH_TAG=acpi-LNXPWRBN_00 E: LIBINPUT_DEVICE_GROUP=19/0/1:LNXPWRBN/button E: MAJOR=13 E: MINOR=66 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:66 L: device=../../input2 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2 E: EV=3 E: ID_FOR_SEAT=input-acpi-LNXPWRBN_00 E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_PATH=acpi-LNXPWRBN:00 E: ID_PATH_TAG=acpi-LNXPWRBN_00 E: KEY=10000000000000 0 E: MODALIAS=input:b0019v0000p0001e0000-e0,1,k74,ramlsfw E: NAME="Power Button" E: PHYS="LNXPWRBN/button/input0" E: PRODUCT=19/0/1/0 E: PROP=0 E: SUBSYSTEM=input E: TAGS=:seat: A: capabilities/abs=0 A: capabilities/ev=3 A: capabilities/ff=0 A: capabilities/key=10000000000000 0 A: capabilities/led=0 A: capabilities/msc=0 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=0 L: device=../../../LNXPWRBN:00 A: id/bustype=0019 A: id/product=0001 A: id/vendor=0000 A: id/version=0000 A: modalias=input:b0019v0000p0001e0000-e0,1,k74,ramlsfw A: name=Power Button A: phys=LNXPWRBN/button/input0 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/LNXSYSTM:00/LNXPWRBN:00 E: DRIVER=button E: ID_VENDOR_FROM_DATABASE=The Linux Foundation E: MODALIAS=acpi:LNXPWRBN: E: SUBSYSTEM=acpi L: driver=../../../bus/acpi/drivers/button A: hid=LNXPWRBN A: modalias=acpi:LNXPWRBN: A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: power/wakeup=enabled A: power/wakeup_abort_count=0 A: power/wakeup_active=0 A: power/wakeup_active_count=0 A: power/wakeup_count=0 A: power/wakeup_expire_count=0 A: power/wakeup_last_time_ms=46 A: power/wakeup_max_time_ms=0 A: power/wakeup_total_time_ms=0 P: /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input3/event3 N: input/event3 E: DEVNAME=/dev/input/event3 E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_PATH=acpi-LNXVIDEO:00 E: ID_PATH_TAG=acpi-LNXVIDEO_00 E: LIBINPUT_DEVICE_GROUP=19/0/6:LNXVIDEO/video E: MAJOR=13 E: MINOR=67 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:67 L: device=../../input3 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input3 E: EV=3 E: ID_FOR_SEAT=input-acpi-LNXVIDEO_00 E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_PATH=acpi-LNXVIDEO:00 E: ID_PATH_TAG=acpi-LNXVIDEO_00 E: KEY=3e000b00000000 0 0 0 E: MODALIAS=input:b0019v0000p0006e0000-e0,1,kE0,E1,E3,F1,F2,F3,F4,F5,ramlsfw E: NAME="Video Bus" E: PHYS="LNXVIDEO/video/input0" E: PRODUCT=19/0/6/0 E: PROP=0 E: SUBSYSTEM=input E: TAGS=:seat: A: capabilities/abs=0 A: capabilities/ev=3 A: capabilities/ff=0 A: capabilities/key=3e000b00000000 0 0 0 A: capabilities/led=0 A: capabilities/msc=0 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=0 L: device=../../../LNXVIDEO:00 A: id/bustype=0019 A: id/product=0006 A: id/vendor=0000 A: id/version=0000 A: modalias=input:b0019v0000p0006e0000-e0,1,kE0,E1,E3,F1,F2,F3,F4,F5,ramlsfw A: name=Video Bus A: phys=LNXVIDEO/video/input0 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00 E: DRIVER=video E: ID_VENDOR_FROM_DATABASE=The Linux Foundation E: MODALIAS=acpi:LNXVIDEO: E: SUBSYSTEM=acpi A: adr=0x00020000 L: driver=../../../../../bus/acpi/drivers/video A: hid=LNXVIDEO A: modalias=acpi:LNXVIDEO: A: path=\\_SB_.PCI0.GFX0 L: physical_node=../../../../pci0000:00/0000:00:02.0 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00 E: ID_VENDOR_FROM_DATABASE=The Linux Foundation E: MODALIAS=acpi:PNP0A08:PNP0A03: E: SUBSYSTEM=acpi A: adr=0x00000000 A: hid=PNP0A08 A: modalias=acpi:PNP0A08:PNP0A03: A: path=\\_SB_.PCI0 L: physical_node=../../../pci0000:00 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: uid=0 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.2/2-2.2:1.0/0003:093A:2521.0001/input/input4/event4 N: input/event4 S: input/by-id/usb-093a_USB_OPTICAL_MOUSE-event-mouse S: input/by-path/pci-0000:00:14.0-usb-0:2.2:1.0-event-mouse E: DEVLINKS=/dev/input/by-path/pci-0000:00:14.0-usb-0:2.2:1.0-event-mouse /dev/input/by-id/usb-093a_USB_OPTICAL_MOUSE-event-mouse E: DEVNAME=/dev/input/event4 E: ID_BUS=usb E: ID_INPUT=1 E: ID_INPUT_MOUSE=1 E: ID_MODEL=USB_OPTICAL_MOUSE E: ID_MODEL_ENC=USB\x20OPTICAL\x20MOUSE E: ID_MODEL_ID=2521 E: ID_PATH=pci-0000:00:14.0-usb-0:2.2:1.0 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_2_1_0 E: ID_REVISION=0100 E: ID_SERIAL=093a_USB_OPTICAL_MOUSE E: ID_TYPE=hid E: ID_USB_DRIVER=usbhid E: ID_USB_INTERFACES=:030102: E: ID_USB_INTERFACE_NUM=00 E: ID_VENDOR=093a E: ID_VENDOR_ENC=093a E: ID_VENDOR_ID=093a E: LIBINPUT_DEVICE_GROUP=3/93a/2521:usb-0000:00:14.0-2 E: MAJOR=13 E: MINOR=68 E: MOUSE_DPI=*1000@125 1600@125 600@125 E: SUBSYSTEM=input A: dev=13:68 L: device=../../input4 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.2/2-2.2:1.0/0003:093A:2521.0001/input/input4 E: EV=17 E: ID_BUS=usb E: ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_2_2_1_0 E: ID_INPUT=1 E: ID_INPUT_MOUSE=1 E: ID_MODEL=USB_OPTICAL_MOUSE E: ID_MODEL_ENC=USB\x20OPTICAL\x20MOUSE E: ID_MODEL_ID=2521 E: ID_PATH=pci-0000:00:14.0-usb-0:2.2:1.0 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_2_1_0 E: ID_REVISION=0100 E: ID_SERIAL=093a_USB_OPTICAL_MOUSE E: ID_TYPE=hid E: ID_USB_DRIVER=usbhid E: ID_USB_INTERFACES=:030102: E: ID_USB_INTERFACE_NUM=00 E: ID_VENDOR=093a E: ID_VENDOR_ENC=093a E: ID_VENDOR_ID=093a E: KEY=1f0000 0 0 0 0 E: MODALIAS=input:b0003v093Ap2521e0111-e0,1,2,4,k110,111,112,113,114,r0,1,6,8,am4,lsfw E: MSC=10 E: NAME="USB OPTICAL MOUSE" E: PHYS="usb-0000:00:14.0-2.2/input0" E: PRODUCT=3/93a/2521/111 E: PROP=0 E: REL=143 E: SUBSYSTEM=input E: TAGS=:seat: E: UNIQ="" A: capabilities/abs=0 A: capabilities/ev=17 A: capabilities/ff=0 A: capabilities/key=1f0000 0 0 0 0 A: capabilities/led=0 A: capabilities/msc=10 A: capabilities/rel=143 A: capabilities/snd=0 A: capabilities/sw=0 L: device=../../../0003:093A:2521.0001 A: id/bustype=0003 A: id/product=2521 A: id/vendor=093a A: id/version=0111 A: modalias=input:b0003v093Ap2521e0111-e0,1,2,4,k110,111,112,113,114,r0,1,6,8,am4,lsfw A: name=USB OPTICAL MOUSE A: phys=usb-0000:00:14.0-2.2/input0 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.2/2-2.2:1.0/0003:093A:2521.0001 E: DRIVER=hid-generic E: HID_ID=0003:0000093A:00002521 E: HID_NAME=USB OPTICAL MOUSE E: HID_PHYS=usb-0000:00:14.0-2.2/input0 E: HID_UNIQ= E: MODALIAS=hid:b0003g0001v0000093Ap00002521 E: SUBSYSTEM=hid A: country=00 L: driver=../../../../../../../../bus/hid/drivers/hid-generic A: modalias=hid:b0003g0001v0000093Ap00002521 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 H: report_descriptor=05010902A1010509190129051500250195057501810295017503810305010901A1000930093116018026FF7F751095028106C009381581257F750895018106050C0A38021581257F950175088106C0 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.2/2-2.2:1.0 E: DEVTYPE=usb_interface E: DRIVER=usbhid E: ID_MODEL_FROM_DATABASE=Optical Mouse E: ID_VENDOR_FROM_DATABASE=Pixart Imaging, Inc. E: INTERFACE=3/1/2 E: MODALIAS=usb:v093Ap2521d0100dc00dsc00dp00ic03isc01ip02in00 E: PRODUCT=93a/2521/100 E: SUBSYSTEM=usb E: TYPE=0/0/0 A: authorized=1 A: bAlternateSetting= 0 A: bInterfaceClass=03 A: bInterfaceNumber=00 A: bInterfaceProtocol=02 A: bInterfaceSubClass=01 A: bNumEndpoints=01 L: driver=../../../../../../../bus/usb/drivers/usbhid A: modalias=usb:v093Ap2521d0100dc00dsc00dp00ic03isc01ip02in00 A: supports_autosuspend=1 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.2 N: bus/usb/002/005=12011001000000083A09212500010002000109022200010104A032090400000103010200092111010001224F000705810307000A E: BUSNUM=002 E: DEVNAME=/dev/bus/usb/002/005 E: DEVNUM=005 E: DEVTYPE=usb_device E: DRIVER=usb E: ID_BUS=usb E: ID_MODEL=USB_OPTICAL_MOUSE E: ID_MODEL_ENC=USB\x20OPTICAL\x20MOUSE E: ID_MODEL_FROM_DATABASE=Optical Mouse E: ID_MODEL_ID=2521 E: ID_REVISION=0100 E: ID_SERIAL=093a_USB_OPTICAL_MOUSE E: ID_USB_INTERFACES=:030102: E: ID_VENDOR=093a E: ID_VENDOR_ENC=093a E: ID_VENDOR_FROM_DATABASE=Pixart Imaging, Inc. E: ID_VENDOR_ID=093a E: MAJOR=189 E: MINOR=132 E: PRODUCT=93a/2521/100 E: SUBSYSTEM=usb E: TYPE=0/0/0 A: authorized=1 A: avoid_reset_quirk=0 A: bConfigurationValue=1 A: bDeviceClass=00 A: bDeviceProtocol=00 A: bDeviceSubClass=00 A: bMaxPacketSize0=8 A: bMaxPower=100mA A: bNumConfigurations=1 A: bNumInterfaces= 1 A: bcdDevice=0100 A: bmAttributes=a0 A: busnum=2 A: configuration=HID-compliant MOUSE H: descriptors=12011001000000083A09212500010002000109022200010104A032090400000103010200092111010001224F000705810307000A A: dev=189:132 A: devnum=5 A: devpath=2.2 L: driver=../../../../../../bus/usb/drivers/usb A: idProduct=2521 A: idVendor=093a A: ltm_capable=no A: maxchild=0 L: port=../2-2:1.0/2-2-port2 A: power/active_duration=16246228 A: power/autosuspend=2 A: power/autosuspend_delay_ms=2000 A: power/connected_duration=16246228 A: power/control=on A: power/level=on A: power/persist=1 A: power/runtime_active_time=16246082 A: power/runtime_status=active A: power/runtime_suspended_time=0 A: power/wakeup=disabled A: power/wakeup_abort_count= A: power/wakeup_active= A: power/wakeup_active_count= A: power/wakeup_count= A: power/wakeup_expire_count= A: power/wakeup_last_time_ms= A: power/wakeup_max_time_ms= A: power/wakeup_total_time_ms= A: product=USB OPTICAL MOUSE A: quirks=0x0 A: removable=unknown A: speed=1.5 A: urbnum=179715 A: version= 1.10 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2 N: bus/usb/002/002=1201000209000140E305080637850001000109021900010100E0320904000001090000000705810301000C E: BUSNUM=002 E: DEVNAME=/dev/bus/usb/002/002 E: DEVNUM=002 E: DEVTYPE=usb_device E: DRIVER=usb E: ID_BUS=usb E: ID_FOR_SEAT=usb-pci-0000_00_14_0-usb-0_2 E: ID_MODEL=USB2.0_Hub E: ID_MODEL_ENC=USB2.0\x20Hub E: ID_MODEL_FROM_DATABASE=Hub E: ID_MODEL_ID=0608 E: ID_PATH=pci-0000:00:14.0-usb-0:2 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2 E: ID_REVISION=8537 E: ID_SERIAL=05e3_USB2.0_Hub E: ID_USB_INTERFACES=:090000: E: ID_VENDOR=05e3 E: ID_VENDOR_ENC=05e3 E: ID_VENDOR_FROM_DATABASE=Genesys Logic, Inc. E: ID_VENDOR_ID=05e3 E: MAJOR=189 E: MINOR=129 E: PRODUCT=5e3/608/8537 E: SUBSYSTEM=usb E: TAGS=:seat: E: TYPE=9/0/1 A: authorized=1 A: avoid_reset_quirk=0 A: bConfigurationValue=1 A: bDeviceClass=09 A: bDeviceProtocol=01 A: bDeviceSubClass=00 A: bMaxPacketSize0=64 A: bMaxPower=100mA A: bNumConfigurations=1 A: bNumInterfaces= 1 A: bcdDevice=8537 A: bmAttributes=e0 A: busnum=2 A: configuration= H: descriptors=1201000209000140E305080637850001000109021900010100E0320904000001090000000705810301000C A: dev=189:129 A: devnum=2 A: devpath=2 L: driver=../../../../../bus/usb/drivers/usb A: idProduct=0608 A: idVendor=05e3 A: ltm_capable=no A: maxchild=4 L: port=../2-0:1.0/usb2-port2 A: power/active_duration=16246866 A: power/autosuspend=0 A: power/autosuspend_delay_ms=0 A: power/connected_duration=16246866 A: power/control=auto A: power/level=auto A: power/runtime_active_time=16246626 A: power/runtime_status=active A: power/runtime_suspended_time=0 A: power/wakeup=disabled A: power/wakeup_abort_count= A: power/wakeup_active= A: power/wakeup_active_count= A: power/wakeup_count= A: power/wakeup_expire_count= A: power/wakeup_last_time_ms= A: power/wakeup_max_time_ms= A: power/wakeup_total_time_ms= A: product=USB2.0 Hub A: quirks=0x0 A: removable=removable A: speed=480 A: urbnum=46 A: version= 2.00 P: /devices/pci0000:00/0000:00:14.0/usb2 N: bus/usb/002/001=12010002090001406B1D020016040302010109021900010100E0000904000001090000000705810304000C E: BUSNUM=002 E: DEVNAME=/dev/bus/usb/002/001 E: DEVNUM=001 E: DEVTYPE=usb_device E: DRIVER=usb E: ID_BUS=usb E: ID_FOR_SEAT=usb-pci-0000_00_14_0 E: ID_MODEL=xHCI_Host_Controller E: ID_MODEL_ENC=xHCI\x20Host\x20Controller E: ID_MODEL_FROM_DATABASE=2.0 root hub E: ID_MODEL_ID=0002 E: ID_PATH=pci-0000:00:14.0 E: ID_PATH_TAG=pci-0000_00_14_0 E: ID_REVISION=0416 E: ID_SERIAL=Linux_4.16.3-300.fc28.x86_64_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 E: ID_SERIAL_SHORT=0000:00:14.0 E: ID_USB_INTERFACES=:090000: E: ID_VENDOR=Linux_4.16.3-300.fc28.x86_64_xhci-hcd E: ID_VENDOR_ENC=Linux\x204.16.3-300.fc28.x86_64\x20xhci-hcd E: ID_VENDOR_FROM_DATABASE=Linux Foundation E: ID_VENDOR_ID=1d6b E: MAJOR=189 E: MINOR=128 E: PRODUCT=1d6b/2/416 E: SUBSYSTEM=usb E: TAGS=:seat: E: TYPE=9/0/1 A: authorized=1 A: authorized_default=1 A: avoid_reset_quirk=0 A: bConfigurationValue=1 A: bDeviceClass=09 A: bDeviceProtocol=01 A: bDeviceSubClass=00 A: bMaxPacketSize0=64 A: bMaxPower=0mA A: bNumConfigurations=1 A: bNumInterfaces= 1 A: bcdDevice=0416 A: bmAttributes=e0 A: busnum=2 A: configuration= H: descriptors=12010002090001406B1D020016040302010109021900010100E0000904000001090000000705810304000C A: dev=189:128 A: devnum=1 A: devpath=0 L: driver=../../../../bus/usb/drivers/usb A: idProduct=0002 A: idVendor=1d6b A: interface_authorized_default=1 A: ltm_capable=no A: manufacturer=Linux 4.16.3-300.fc28.x86_64 xhci-hcd A: maxchild=11 A: power/active_duration=16247082 A: power/autosuspend=0 A: power/autosuspend_delay_ms=0 A: power/connected_duration=16247083 A: power/control=auto A: power/level=auto A: power/runtime_active_time=16247082 A: power/runtime_status=active A: power/runtime_suspended_time=0 A: power/wakeup=disabled A: power/wakeup_abort_count= A: power/wakeup_active= A: power/wakeup_active_count= A: power/wakeup_count= A: power/wakeup_expire_count= A: power/wakeup_last_time_ms= A: power/wakeup_max_time_ms= A: power/wakeup_total_time_ms= A: product=xHCI Host Controller A: quirks=0x0 A: removable=unknown A: serial=0000:00:14.0 A: speed=480 A: urbnum=79 A: version= 2.00 P: /devices/pci0000:00/0000:00:14.0 E: DRIVER=xhci_hcd E: ID_MODEL_FROM_DATABASE=Wildcat Point-LP USB xHCI Controller E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller E: ID_VENDOR_FROM_DATABASE=Intel Corporation E: MODALIAS=pci:v00008086d00009CB1sv00008086sd00002057bc0Csc03i30 E: PCI_CLASS=C0330 E: PCI_ID=8086:9CB1 E: PCI_SLOT_NAME=0000:00:14.0 E: PCI_SUBSYS_ID=8086:2057 E: SUBSYSTEM=pci A: ari_enabled=0 A: broken_parity_status=0 A: class=0x0c0330 H: config=8680B19C060490020330030C00000000040012F700000000000000000000000000000000000000000000000086805720000000007000000000000000FF010000 A: consistent_dma_mask_bits=64 A: d3cold_allowed=1 A: dbc=disabled A: device=0x9cb1 A: dma_mask_bits=64 L: driver=../../../bus/pci/drivers/xhci_hcd A: driver_override=(null) A: enable=1 A: irq=45 A: local_cpulist=0-3 A: local_cpus=f A: modalias=pci:v00008086d00009CB1sv00008086sd00002057bc0Csc03i30 A: msi_bus=1 A: msi_irqs/45=msi A: numa_node=-1 A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 13 13 2112 13\nxHCI ring segments 42 44 4096 44\nbuffer-2048 3 6 2048 3\nbuffer-512 12 16 512 2\nbuffer-128 15 32 128 1\nbuffer-32 0 0 32 0 A: power/control=on A: power/runtime_active_time=16247530 A: power/runtime_status=active A: power/runtime_suspended_time=0 A: power/wakeup=enabled A: power/wakeup_abort_count=0 A: power/wakeup_active=0 A: power/wakeup_active_count=0 A: power/wakeup_count=0 A: power/wakeup_expire_count=0 A: power/wakeup_last_time_ms=504 A: power/wakeup_max_time_ms=0 A: power/wakeup_total_time_ms=0 A: resource=0x00000000f7120000 0x00000000f712ffff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000 A: revision=0x03 A: subsystem_device=0x2057 A: subsystem_vendor=0x8086 A: vendor=0x8086 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.3/2-2.3:1.0/0003:04D9:0112.0002/input/input5/event5 N: input/event5 S: input/by-id/usb-04d9_USB-HID_Keyboard-event-kbd S: input/by-path/pci-0000:00:14.0-usb-0:2.3:1.0-event-kbd E: DEVLINKS=/dev/input/by-id/usb-04d9_USB-HID_Keyboard-event-kbd /dev/input/by-path/pci-0000:00:14.0-usb-0:2.3:1.0-event-kbd E: DEVNAME=/dev/input/event5 E: ID_BUS=usb E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_INPUT_KEYBOARD=1 E: ID_MODEL=USB-HID_Keyboard E: ID_MODEL_ENC=USB-HID\x20Keyboard E: ID_MODEL_ID=0112 E: ID_PATH=pci-0000:00:14.0-usb-0:2.3:1.0 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_3_1_0 E: ID_REVISION=0107 E: ID_SERIAL=04d9_USB-HID_Keyboard E: ID_TYPE=hid E: ID_USB_DRIVER=usbhid E: ID_USB_INTERFACES=:030101:030000: E: ID_USB_INTERFACE_NUM=00 E: ID_VENDOR=04d9 E: ID_VENDOR_ENC=04d9 E: ID_VENDOR_ID=04d9 E: LIBINPUT_DEVICE_GROUP=3/4d9/112:usb-0000:00:14.0-2 E: MAJOR=13 E: MINOR=69 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:69 L: device=../../input5 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.3/2-2.3:1.0/0003:04D9:0112.0002/input/input5 E: EV=120013 E: ID_BUS=usb E: ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_2_3_1_0 E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_INPUT_KEYBOARD=1 E: ID_MODEL=USB-HID_Keyboard E: ID_MODEL_ENC=USB-HID\x20Keyboard E: ID_MODEL_ID=0112 E: ID_PATH=pci-0000:00:14.0-usb-0:2.3:1.0 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_3_1_0 E: ID_REVISION=0107 E: ID_SERIAL=04d9_USB-HID_Keyboard E: ID_TYPE=hid E: ID_USB_DRIVER=usbhid E: ID_USB_INTERFACES=:030101:030000: E: ID_USB_INTERFACE_NUM=00 E: ID_VENDOR=04d9 E: ID_VENDOR_ENC=04d9 E: ID_VENDOR_ID=04d9 E: KEY=1000000000007 ff800000000007ff febeffdfffefffff fffffffffffffffe E: LED=7 E: MODALIAS=input:b0003v04D9p0112e0111-e0,1,4,11,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,F0,ram4,l0,1,2,sfw E: MSC=10 E: NAME="USB-HID Keyboard" E: PHYS="usb-0000:00:14.0-2.3/input0" E: PRODUCT=3/4d9/112/111 E: PROP=0 E: SUBSYSTEM=input E: TAGS=:seat: E: UNIQ="" A: capabilities/abs=0 A: capabilities/ev=120013 A: capabilities/ff=0 A: capabilities/key=1000000000007 ff800000000007ff febeffdfffefffff fffffffffffffffe A: capabilities/led=7 A: capabilities/msc=10 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=0 L: device=../../../0003:04D9:0112.0002 A: id/bustype=0003 A: id/product=0112 A: id/vendor=04d9 A: id/version=0111 A: modalias=input:b0003v04D9p0112e0111-e0,1,4,11,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,F0,ram4,l0,1,2,sfw A: name=USB-HID Keyboard A: phys=usb-0000:00:14.0-2.3/input0 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.3/2-2.3:1.0/0003:04D9:0112.0002 E: DRIVER=hid-generic E: HID_ID=0003:000004D9:00000112 E: HID_NAME=USB-HID Keyboard E: HID_PHYS=usb-0000:00:14.0-2.3/input0 E: HID_UNIQ= E: MODALIAS=hid:b0003g0001v000004D9p00000112 E: SUBSYSTEM=hid A: country=00 L: driver=../../../../../../../../bus/hid/drivers/hid-generic A: modalias=hid:b0003g0001v000004D9p00000112 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 H: report_descriptor=05010906A101050719E029E71500250175019508810295017508810395037501050819012903910295017505910395067508150026A4000507190029A48100C0 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.3/2-2.3:1.0 E: DEVTYPE=usb_interface E: DRIVER=usbhid E: ID_VENDOR_FROM_DATABASE=Holtek Semiconductor, Inc. E: INTERFACE=3/1/1 E: MODALIAS=usb:v04D9p0112d0107dc00dsc00dp00ic03isc01ip01in00 E: PRODUCT=4d9/112/107 E: SUBSYSTEM=usb E: TYPE=0/0/0 A: authorized=1 A: bAlternateSetting= 0 A: bInterfaceClass=03 A: bInterfaceNumber=00 A: bInterfaceProtocol=01 A: bInterfaceSubClass=01 A: bNumEndpoints=01 L: driver=../../../../../../../bus/usb/drivers/usbhid A: modalias=usb:v04D9p0112d0107dc00dsc00dp00ic03isc01ip01in00 A: supports_autosuspend=1 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.3 N: bus/usb/002/006=1201100100000040D904120107010002000109025B00030100A03209040000010301010009211101000122400007058103080001090401000103000000092111010001226500070582032000010904020002030000000921110100012222000705830340000107050403400001 E: BUSNUM=002 E: DEVNAME=/dev/bus/usb/002/006 E: DEVNUM=006 E: DEVTYPE=usb_device E: DRIVER=usb E: ID_BUS=usb E: ID_MODEL=USB-HID_Keyboard E: ID_MODEL_ENC=USB-HID\x20Keyboard E: ID_MODEL_ID=0112 E: ID_REVISION=0107 E: ID_SERIAL=04d9_USB-HID_Keyboard E: ID_USB_INTERFACES=:030101:030000: E: ID_VENDOR=04d9 E: ID_VENDOR_ENC=04d9 E: ID_VENDOR_FROM_DATABASE=Holtek Semiconductor, Inc. E: ID_VENDOR_ID=04d9 E: MAJOR=189 E: MINOR=133 E: PRODUCT=4d9/112/107 E: SUBSYSTEM=usb E: TYPE=0/0/0 A: authorized=1 A: avoid_reset_quirk=0 A: bConfigurationValue=1 A: bDeviceClass=00 A: bDeviceProtocol=00 A: bDeviceSubClass=00 A: bMaxPacketSize0=64 A: bMaxPower=100mA A: bNumConfigurations=1 A: bNumInterfaces= 3 A: bcdDevice=0107 A: bmAttributes=a0 A: busnum=2 A: configuration= H: descriptors=1201100100000040D904120107010002000109025B00030100A03209040000010301010009211101000122400007058103080001090401000103000000092111010001226500070582032000010904020002030000000921110100012222000705830340000107050403400001 A: dev=189:133 A: devnum=6 A: devpath=2.3 L: driver=../../../../../../bus/usb/drivers/usb A: idProduct=0112 A: idVendor=04d9 A: ltm_capable=no A: maxchild=0 L: port=../2-2:1.0/2-2-port3 A: power/active_duration=16246123 A: power/autosuspend=2 A: power/autosuspend_delay_ms=2000 A: power/connected_duration=16246123 A: power/control=on A: power/level=on A: power/persist=1 A: power/runtime_active_time=16245983 A: power/runtime_status=active A: power/runtime_suspended_time=0 A: power/wakeup=enabled A: power/wakeup_abort_count=0 A: power/wakeup_active=0 A: power/wakeup_active_count=0 A: power/wakeup_count=0 A: power/wakeup_expire_count=0 A: power/wakeup_last_time_ms=1616 A: power/wakeup_max_time_ms=0 A: power/wakeup_total_time_ms=0 A: product=USB-HID Keyboard A: quirks=0x0 A: removable=unknown A: speed=12 A: urbnum=31507 A: version= 1.10 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.3/2-2.3:1.1/0003:04D9:0112.0003/input/input6/event6 N: input/event6 S: input/by-id/usb-04d9_USB-HID_Keyboard-event-if01 S: input/by-path/pci-0000:00:14.0-usb-0:2.3:1.1-event E: DEVLINKS=/dev/input/by-id/usb-04d9_USB-HID_Keyboard-event-if01 /dev/input/by-path/pci-0000:00:14.0-usb-0:2.3:1.1-event E: DEVNAME=/dev/input/event6 E: ID_BUS=usb E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_MODEL=USB-HID_Keyboard E: ID_MODEL_ENC=USB-HID\x20Keyboard E: ID_MODEL_ID=0112 E: ID_PATH=pci-0000:00:14.0-usb-0:2.3:1.1 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_3_1_1 E: ID_REVISION=0107 E: ID_SERIAL=04d9_USB-HID_Keyboard E: ID_TYPE=hid E: ID_USB_DRIVER=usbhid E: ID_USB_INTERFACES=:030101:030000: E: ID_USB_INTERFACE_NUM=01 E: ID_VENDOR=04d9 E: ID_VENDOR_ENC=04d9 E: ID_VENDOR_ID=04d9 E: LIBINPUT_DEVICE_GROUP=3/4d9/112:usb-0000:00:14.0-2 E: MAJOR=13 E: MINOR=70 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:70 L: device=../../input6 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.3/2-2.3:1.1/0003:04D9:0112.0003/input/input6 E: EV=13 E: ID_BUS=usb E: ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_2_3_1_1 E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_MODEL=USB-HID_Keyboard E: ID_MODEL_ENC=USB-HID\x20Keyboard E: ID_MODEL_ID=0112 E: ID_PATH=pci-0000:00:14.0-usb-0:2.3:1.1 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_3_1_1 E: ID_REVISION=0107 E: ID_SERIAL=04d9_USB-HID_Keyboard E: ID_TYPE=hid E: ID_USB_DRIVER=usbhid E: ID_USB_INTERFACES=:030101:030000: E: ID_USB_INTERFACE_NUM=01 E: ID_VENDOR=04d9 E: ID_VENDOR_ENC=04d9 E: ID_VENDOR_ID=04d9 E: KEY=2000000 3878d801d001 1e000000000000 0 E: MODALIAS=input:b0003v04D9p0112e0111-e0,1,4,k71,72,73,74,80,8C,8E,8F,90,9B,9C,9E,9F,A3,A4,A5,A6,AB,AC,AD,D9,ram4,lsfw E: MSC=10 E: NAME="USB-HID Keyboard" E: PHYS="usb-0000:00:14.0-2.3/input1" E: PRODUCT=3/4d9/112/111 E: PROP=0 E: SUBSYSTEM=input E: TAGS=:seat: E: UNIQ="" A: capabilities/abs=0 A: capabilities/ev=13 A: capabilities/ff=0 A: capabilities/key=2000000 3878d801d001 1e000000000000 0 A: capabilities/led=0 A: capabilities/msc=10 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=0 L: device=../../../0003:04D9:0112.0003 A: id/bustype=0003 A: id/product=0112 A: id/vendor=04d9 A: id/version=0111 A: modalias=input:b0003v04D9p0112e0111-e0,1,4,k71,72,73,74,80,8C,8E,8F,90,9B,9C,9E,9F,A3,A4,A5,A6,AB,AC,AD,D9,ram4,lsfw A: name=USB-HID Keyboard A: phys=usb-0000:00:14.0-2.3/input1 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.3/2-2.3:1.1/0003:04D9:0112.0003 E: DRIVER=hid-generic E: HID_ID=0003:000004D9:00000112 E: HID_NAME=USB-HID Keyboard E: HID_PHYS=usb-0000:00:14.0-2.3/input1 E: HID_UNIQ= E: MODALIAS=hid:b0003g0001v000004D9p00000112 E: SUBSYSTEM=hid A: country=00 L: driver=../../../../../../../../bus/hid/drivers/hid-generic A: modalias=hid:b0003g0001v000004D9p00000112 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 H: report_descriptor=05010980A10185011981298315002501950375018102950175058101C0050C0901A101850215002501951275010A83010A8A010A92010A940109CD09B709B609B509E209EA09E90A21020A23020A24020A25020A26020A27020A2A0281029501750E8101C0 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.3/2-2.3:1.1 E: DEVTYPE=usb_interface E: DRIVER=usbhid E: ID_VENDOR_FROM_DATABASE=Holtek Semiconductor, Inc. E: INTERFACE=3/0/0 E: MODALIAS=usb:v04D9p0112d0107dc00dsc00dp00ic03isc00ip00in01 E: PRODUCT=4d9/112/107 E: SUBSYSTEM=usb E: TYPE=0/0/0 A: authorized=1 A: bAlternateSetting= 0 A: bInterfaceClass=03 A: bInterfaceNumber=01 A: bInterfaceProtocol=00 A: bInterfaceSubClass=00 A: bNumEndpoints=01 L: driver=../../../../../../../bus/usb/drivers/usbhid A: modalias=usb:v04D9p0112d0107dc00dsc00dp00ic03isc00ip00in01 A: supports_autosuspend=1 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.1/2-2.1.1/2-2.1.1:1.3/0003:0D8C:0102.0005/input/input7/event7 N: input/event7 S: input/by-id/usb-0d8c_USB_Sound_Device-event-if03 S: input/by-path/pci-0000:00:14.0-usb-0:2.1.1:1.3-event E: DEVLINKS=/dev/input/by-id/usb-0d8c_USB_Sound_Device-event-if03 /dev/input/by-path/pci-0000:00:14.0-usb-0:2.1.1:1.3-event E: DEVNAME=/dev/input/event7 E: ID_BUS=usb E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_MODEL=USB_Sound_Device E: ID_MODEL_ENC=USB\x20Sound\x20Device\x20\x20\x20\x20\x20\x20\x20\x20 E: ID_MODEL_ID=0102 E: ID_PATH=pci-0000:00:14.0-usb-0:2.1.1:1.3 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1_1_1_3 E: ID_REVISION=0010 E: ID_SERIAL=0d8c_USB_Sound_Device E: ID_TYPE=hid E: ID_USB_DRIVER=usbhid E: ID_USB_INTERFACES=:010100:010200:030000: E: ID_USB_INTERFACE_NUM=03 E: ID_VENDOR=0d8c E: ID_VENDOR_ENC=0d8c E: ID_VENDOR_ID=0d8c E: LIBINPUT_DEVICE_GROUP=3/d8c/102:usb-0000:00:14.0-2.1 E: MAJOR=13 E: MINOR=71 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:71 L: device=../../input7 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.1/2-2.1.1/2-2.1.1:1.3/0003:0D8C:0102.0005/input/input7 E: EV=13 E: ID_BUS=usb E: ID_FOR_SEAT=input-pci-0000_00_14_0-usb-0_2_1_1_1_3 E: ID_INPUT=1 E: ID_INPUT_KEY=1 E: ID_MODEL=USB_Sound_Device E: ID_MODEL_ENC=USB\x20Sound\x20Device\x20\x20\x20\x20\x20\x20\x20\x20 E: ID_MODEL_ID=0102 E: ID_PATH=pci-0000:00:14.0-usb-0:2.1.1:1.3 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1_1_1_3 E: ID_REVISION=0010 E: ID_SERIAL=0d8c_USB_Sound_Device E: ID_TYPE=hid E: ID_USB_DRIVER=usbhid E: ID_USB_INTERFACES=:010100:010200:030000: E: ID_USB_INTERFACE_NUM=03 E: ID_VENDOR=0d8c E: ID_VENDOR_ENC=0d8c E: ID_VENDOR_ID=0d8c E: KEY=e000000000000 0 E: MODALIAS=input:b0003v0D8Cp0102e0100-e0,1,4,k71,72,73,ram4,lsfw E: MSC=10 E: NAME="USB Sound Device " E: PHYS="usb-0000:00:14.0-2.1.1/input3" E: PRODUCT=3/d8c/102/100 E: PROP=0 E: SUBSYSTEM=input E: TAGS=:seat: E: UNIQ="" A: capabilities/abs=0 A: capabilities/ev=13 A: capabilities/ff=0 A: capabilities/key=e000000000000 0 A: capabilities/led=0 A: capabilities/msc=10 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=0 L: device=../../../0003:0D8C:0102.0005 A: id/bustype=0003 A: id/product=0102 A: id/vendor=0d8c A: id/version=0100 A: modalias=input:b0003v0D8Cp0102e0100-e0,1,4,k71,72,73,ram4,lsfw A: name=USB Sound Device A: phys=usb-0000:00:14.0-2.1.1/input3 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.1/2-2.1.1/2-2.1.1:1.3/0003:0D8C:0102.0005 E: DRIVER=hid-generic E: HID_ID=0003:00000D8C:00000102 E: HID_NAME=USB Sound Device E: HID_PHYS=usb-0000:00:14.0-2.1.1/input3 E: HID_UNIQ= E: MODALIAS=hid:b0003g0001v00000D8Cp00000102 E: SUBSYSTEM=hid A: country=00 L: driver=../../../../../../../../../bus/hid/drivers/hid-generic A: modalias=hid:b0003g0001v00000D8Cp00000102 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 H: report_descriptor=050C0901A1011500250109E909EA75019502814209E20900810609009504810226FF000900750895028102090095049102C0 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.1/2-2.1.1/2-2.1.1:1.3 E: DEVTYPE=usb_interface E: DRIVER=usbhid E: ID_MODEL_FROM_DATABASE=CM106 Like Sound Device E: ID_VENDOR_FROM_DATABASE=C-Media Electronics, Inc. E: INTERFACE=3/0/0 E: MODALIAS=usb:v0D8Cp0102d0010dc00dsc00dp00ic03isc00ip00in03 E: PRODUCT=d8c/102/10 E: SUBSYSTEM=usb E: TYPE=0/0/0 A: authorized=1 A: bAlternateSetting= 0 A: bInterfaceClass=03 A: bInterfaceNumber=03 A: bInterfaceProtocol=00 A: bInterfaceSubClass=00 A: bNumEndpoints=01 L: driver=../../../../../../../../bus/usb/drivers/usbhid A: modalias=usb:v0D8Cp0102d0010dc00dsc00dp00ic03isc00ip00in03 A: supports_autosuspend=1 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.1/2-2.1.1 N: bus/usb/002/007=12011001000000088C0D02011000000200010902160204010080FA0904000000010100000A24010001C8000201020C240201010100083F0600000C24020401020002030000000A2406080401010202000A2406090401010202001924040C0301090B083F0600000000000000000000000000001024060D0C0101020202020202020200092403030103000D000D24041102090B0203000000000924030A01010007000A24050704080F1002000C24020603060002030000000A24060F0601010202000A24060B0601010202000C24020505060002030000000A2406021101010202000A240610050101000000090401000001020000090401010101020000072401010101000E2402010802100244AC0080BB0009050609100301000007250101000000090401020101020000072401010101000E2402010202100244AC0080BB0009050609C40001000007250101000000090401030101020000072401010101000E2402010402100244AC0080BB0009050609880101000007250101000000090401040101020000072401010101000E2402010602100244AC0080BB0009050609480201000007250101000000090401050101020000072401010101000B2402010202100180BB00090506098801010000072501010000000904020000010200000904020101010200000724010A0101000E2402010202100244AC0080BB0009058505C8000100000725010100000009040300010300000009210001000122320007058103030001 E: BUSNUM=002 E: DEVNAME=/dev/bus/usb/002/007 E: DEVNUM=007 E: DEVTYPE=usb_device E: DRIVER=usb E: ID_BUS=usb E: ID_MODEL=USB_Sound_Device E: ID_MODEL_ENC=USB\x20Sound\x20Device\x20\x20\x20\x20\x20\x20\x20\x20 E: ID_MODEL_FROM_DATABASE=CM106 Like Sound Device E: ID_MODEL_ID=0102 E: ID_REVISION=0010 E: ID_SERIAL=0d8c_USB_Sound_Device E: ID_USB_INTERFACES=:010100:010200:030000: E: ID_VENDOR=0d8c E: ID_VENDOR_ENC=0d8c E: ID_VENDOR_FROM_DATABASE=C-Media Electronics, Inc. E: ID_VENDOR_ID=0d8c E: MAJOR=189 E: MINOR=134 E: PRODUCT=d8c/102/10 E: SUBSYSTEM=usb E: TYPE=0/0/0 A: authorized=1 A: avoid_reset_quirk=0 A: bConfigurationValue=1 A: bDeviceClass=00 A: bDeviceProtocol=00 A: bDeviceSubClass=00 A: bMaxPacketSize0=8 A: bMaxPower=500mA A: bNumConfigurations=1 A: bNumInterfaces= 4 A: bcdDevice=0010 A: bmAttributes=80 A: busnum=2 A: configuration= H: descriptors=12011001000000088C0D02011000000200010902160204010080FA0904000000010100000A24010001C8000201020C240201010100083F0600000C24020401020002030000000A2406080401010202000A2406090401010202001924040C0301090B083F0600000000000000000000000000001024060D0C0101020202020202020200092403030103000D000D24041102090B0203000000000924030A01010007000A24050704080F1002000C24020603060002030000000A24060F0601010202000A24060B0601010202000C24020505060002030000000A2406021101010202000A240610050101000000090401000001020000090401010101020000072401010101000E2402010802100244AC0080BB0009050609100301000007250101000000090401020101020000072401010101000E2402010202100244AC0080BB0009050609C40001000007250101000000090401030101020000072401010101000E2402010402100244AC0080BB0009050609880101000007250101000000090401040101020000072401010101000E2402010602100244AC0080BB0009050609480201000007250101000000090401050101020000072401010101000B2402010202100180BB00090506098801010000072501010000000904020000010200000904020101010200000724010A0101000E2402010202100244AC0080BB0009058505C8000100000725010100000009040300010300000009210001000122320007058103030001 A: dev=189:134 A: devnum=7 A: devpath=2.1.1 L: driver=../../../../../../../bus/usb/drivers/usb A: idProduct=0102 A: idVendor=0d8c A: ltm_capable=no A: maxchild=0 L: port=../2-2.1:1.0/2-2.1-port1 A: power/active_duration=16246121 A: power/autosuspend=2 A: power/autosuspend_delay_ms=2000 A: power/connected_duration=16246121 A: power/control=on A: power/level=on A: power/persist=1 A: power/runtime_active_time=16245894 A: power/runtime_status=active A: power/runtime_suspended_time=0 A: product=USB Sound Device A: quirks=0x0 A: removable=unknown A: speed=12 A: urbnum=1507680 A: version= 1.10 P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2.1 N: bus/usb/002/004=1201000209000140E305080637850001000109021900010100E0320904000001090000000705810301000C E: BUSNUM=002 E: DEVNAME=/dev/bus/usb/002/004 E: DEVNUM=004 E: DEVTYPE=usb_device E: DRIVER=usb E: ID_BUS=usb E: ID_FOR_SEAT=usb-pci-0000_00_14_0-usb-0_2_1 E: ID_MODEL=USB2.0_Hub E: ID_MODEL_ENC=USB2.0\x20Hub E: ID_MODEL_FROM_DATABASE=Hub E: ID_MODEL_ID=0608 E: ID_PATH=pci-0000:00:14.0-usb-0:2.1 E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1 E: ID_REVISION=8537 E: ID_SERIAL=05e3_USB2.0_Hub E: ID_USB_INTERFACES=:090000: E: ID_VENDOR=05e3 E: ID_VENDOR_ENC=05e3 E: ID_VENDOR_FROM_DATABASE=Genesys Logic, Inc. E: ID_VENDOR_ID=05e3 E: MAJOR=189 E: MINOR=131 E: PRODUCT=5e3/608/8537 E: SUBSYSTEM=usb E: TAGS=:seat: E: TYPE=9/0/1 A: authorized=1 A: avoid_reset_quirk=0 A: bConfigurationValue=1 A: bDeviceClass=09 A: bDeviceProtocol=01 A: bDeviceSubClass=00 A: bMaxPacketSize0=64 A: bMaxPower=100mA A: bNumConfigurations=1 A: bNumInterfaces= 1 A: bcdDevice=8537 A: bmAttributes=e0 A: busnum=2 A: configuration= H: descriptors=1201000209000140E305080637850001000109021900010100E0320904000001090000000705810301000C A: dev=189:131 A: devnum=4 A: devpath=2.1 L: driver=../../../../../../bus/usb/drivers/usb A: idProduct=0608 A: idVendor=05e3 A: ltm_capable=no A: maxchild=4 L: port=../2-2:1.0/2-2-port1 A: power/active_duration=16246519 A: power/autosuspend=0 A: power/autosuspend_delay_ms=0 A: power/connected_duration=16246519 A: power/control=auto A: power/level=auto A: power/runtime_active_time=16246338 A: power/runtime_status=active A: power/runtime_suspended_time=0 A: power/wakeup=disabled A: power/wakeup_abort_count= A: power/wakeup_active= A: power/wakeup_active_count= A: power/wakeup_count= A: power/wakeup_expire_count= A: power/wakeup_last_time_ms= A: power/wakeup_max_time_ms= A: power/wakeup_total_time_ms= A: product=USB2.0 Hub A: quirks=0x0 A: removable=unknown A: speed=480 A: urbnum=28 A: version= 2.00 P: /devices/pci0000:00/0000:00:03.0/sound/card0/input9/event8 N: input/event8 E: DEVNAME=/dev/input/event8 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:03.0 E: ID_PATH_TAG=pci-0000_00_03_0 E: LIBINPUT_DEVICE_GROUP=0/0/0:ALSA E: MAJOR=13 E: MINOR=72 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:72 L: device=../../input9 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:03.0/sound/card0/input9 E: EV=21 E: ID_FOR_SEAT=input-pci-0000_00_03_0 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:03.0 E: ID_PATH_TAG=pci-0000_00_03_0 E: MODALIAS=input:b0000v0000p0000e0000-e0,5,kramlsfw6,8, E: NAME="HDA Intel HDMI HDMI/DP,pcm=3" E: PHYS="ALSA" E: PRODUCT=0/0/0/0 E: PROP=0 E: SUBSYSTEM=input E: SW=140 E: TAGS=:seat: A: capabilities/abs=0 A: capabilities/ev=21 A: capabilities/ff=0 A: capabilities/key=0 A: capabilities/led=0 A: capabilities/msc=0 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=140 L: device=../../card0 A: id/bustype=0000 A: id/product=0000 A: id/vendor=0000 A: id/version=0000 A: modalias=input:b0000v0000p0000e0000-e0,5,kramlsfw6,8, A: name=HDA Intel HDMI HDMI/DP,pcm=3 A: phys=ALSA A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= P: /devices/pci0000:00/0000:00:03.0/sound/card0/input10/event9 N: input/event9 E: DEVNAME=/dev/input/event9 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:03.0 E: ID_PATH_TAG=pci-0000_00_03_0 E: LIBINPUT_DEVICE_GROUP=0/0/0:ALSA E: MAJOR=13 E: MINOR=73 E: SUBSYSTEM=input E: TAGS=:power-switch: A: dev=13:73 L: device=../../input10 A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 P: /devices/pci0000:00/0000:00:03.0/sound/card0/input10 E: EV=21 E: ID_FOR_SEAT=input-pci-0000_00_03_0 E: ID_INPUT=1 E: ID_INPUT_SWITCH=1 E: ID_PATH=pci-0000:00:03.0 E: ID_PATH_TAG=pci-0000_00_03_0 E: MODALIAS=input:b0000v0000p0000e0000-e0,5,kramlsfw6,8, E: NAME="HDA Intel HDMI HDMI/DP,pcm=7" E: PHYS="ALSA" E: PRODUCT=0/0/0/0 E: PROP=0 E: SUBSYSTEM=input E: SW=140 E: TAGS=:seat: A: capabilities/abs=0 A: capabilities/ev=21 A: capabilities/ff=0 A: capabilities/key=0 A: capabilities/led=0 A: capabilities/msc=0 A: capabilities/rel=0 A: capabilities/snd=0 A: capabilities/sw=140 L: device=../../card0 A: id/bustype=0000 A: id/product=0000 A: id/vendor=0000 A: id/version=0000 A: modalias=input:b0000v0000p0000e0000-e0,5,kramlsfw6,8, A: name=HDA Intel HDMI HDMI/DP,pcm=7 A: phys=ALSA A: power/control=auto A: power/runtime_active_time=0 A: power/runtime_status=unsupported A: power/runtime_suspended_time=0 A: properties=0 A: uniq= 07070100000030000081A400000000000000000000000161C8AFF600000BE0000000000000000000000000000000000000003D00000000qt5-qtudev-20211226+git.dfe043f/tests/auto/udev/tst_udev.cpp/**************************************************************************** * This file is part of Liri. * * Copyright (C) 2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> * * $BEGIN_LICENSE:GPL3+$ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * $END_LICENSE$ ***************************************************************************/ #include <QtTest/QtTest> #include <Qt5Udev/Udev> #include <Qt5Udev/UdevEnumerate> #include <umockdev.h> using namespace QtUdev; class TestUdev : public QObject { Q_OBJECT public: TestUdev(QObject *parent = nullptr) : QObject(parent) { } private: UMockdevTestbed *m_bed = nullptr; private Q_SLOTS: void initTestCase() { m_bed = umockdev_testbed_new(); QVERIFY(m_bed != nullptr); QString path = QFINDTESTDATA("test.umockdev"); QVERIFY(!path.isEmpty()); qInfo() << "Using:" << path; g_autoptr(GError) error = nullptr; umockdev_testbed_add_from_file(m_bed, path.toLatin1().constData(), &error); if (error) QFAIL(error->message); umockdev_testbed_enable(m_bed); QVERIFY(umockdev_in_mock_environment()); } void cleanupTestCase() { if (m_bed) g_object_unref(m_bed); } void testConnection() { Udev *udev = new Udev; QVERIFY(udev->isValid()); delete udev; } void testDevice() { Udev *udev = new Udev; QVERIFY(udev->isValid()); UdevDevice *dev = udev->deviceFromFileName(QStringLiteral("/dev/sda")); QVERIFY(dev); QCOMPARE(dev->deviceNode(), QStringLiteral("/dev/sda")); QCOMPARE(dev->name(), QStringLiteral("sda")); QVERIFY(dev->hasProperty(QStringLiteral("ID_SERIAL"))); QCOMPARE(dev->property(QStringLiteral("ID_SERIAL")), QStringLiteral("TOSHIBA_MQ01ABD100_Y49DSZAOS")); QCOMPARE(dev->property(QStringLiteral("ID_MODEL")), QStringLiteral("TOSHIBA_MQ01ABD100")); delete dev; delete udev; } void testEnumerate() { Udev *udev = new Udev; QVERIFY(udev->isValid()); UdevEnumerate *enumerate = new UdevEnumerate(UdevDevice::InputDevice_Mask, udev); QList<UdevDevice *> devices = enumerate->scan(); QVERIFY(devices.size() > 0); delete enumerate; delete udev; } }; QTEST_MAIN(TestUdev) #include "tst_udev.moc" 07070100000031000081A400000000000000000000000161C8AFF6000001A5000000000000000000000000000000000000003900000000qt5-qtudev-20211226+git.dfe043f/tests/auto/udev/udev.qbsimport qbs 1.0 QtApplication { name: "tst_qtudev" type: base.concat(["autotest"]) condition: project.autotestEnabled Depends { name: "lirideployment" } Depends { name: "Qt" submodules: ["gui", "testlib"] versionAtLeast: project.minimumQtVersion } Depends { name: "Qt5Udev" } Depends { name: "umockdev" } Qt.core.enableKeywords: false files: ["*.cpp"] } 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!277 blocks
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor