__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
#!/usr/bin/env python3
#
# Copyright © 2012 Red Hat, Inc.
#
# Permission to use, copy, modify, distribute, and sell this software
# and its documentation for any purpose is hereby granted without
# fee, provided that the above copyright notice appear in all copies
# and that both that copyright notice and this permission notice
# appear in supporting documentation, and that the name of Red Hat
# not be used in advertising or publicity pertaining to distribution
# of the software without specific, written prior permission. Red
# Hat makes no representations about the suitability of this software
# for any purpose. It is provided "as is" without express or implied
# warranty.
#
# THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
# NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
import argparse
import configparser
import sys
import subprocess
from pathlib import Path
class Tablet(object):
def __init__(self, name, bus, vid, pid):
self.name = name
self.bus = bus
self.vid = vid # Note: this is a string
self.pid = pid # Note: this is a string
self.has_touch = False
self.has_pad = False
self.is_touchscreen = False
# We have everything in strings so let's use that for sorting later
# This will sort bluetooth before usb but meh
self.cmpstr = ":".join((bus, vid, pid, name))
def __lt__(self, other):
return self.cmpstr < other.cmpstr
def __str__(self):
return f"{self.bus}:{self.vid}:{self.pid}:{self.name}"
class HWDBFile:
def __init__(self):
self.tablets = []
def _tablet_entry(self, tablet):
vid = tablet.vid.upper()
pid = tablet.pid.upper()
bustypes = {
"usb": "0003",
"bluetooth": "0005",
}
# serial devices have their own rules, so we skip anything that
# doesn't have straight conversion
try:
bus = bustypes[tablet.bus]
except KeyError:
return
match = f"b{bus}v{vid}p{pid}"
entries = {"*": ["ID_INPUT=1", "ID_INPUT_TABLET=1", "ID_INPUT_JOYSTICK=0"]}
if tablet.has_touch:
if tablet.is_touchscreen:
entries["* Finger"] = ["ID_INPUT_TOUCHSCREEN=1"]
else:
entries["* Finger"] = ["ID_INPUT_TOUCHPAD=1"]
if tablet.has_pad:
entries["* Pad"] = ["ID_INPUT_TABLET_PAD=1"]
# Non-Wacom devices often have a Keyboard node instead of a Pad
# device. If they share the USB ID with the tablet, we likely just
# assigned ID_INPUT_TABLET to a keyboard device - and libinput refuses
# to accept those.
# Let's add a generic exclusion rule for anything we know of with a
# Keyboard device name.
if int(vid, 16) != 0x56A:
entries["* Keyboard"] = ["ID_INPUT_TABLET=0"]
lines = [f"# {tablet.name}"]
for name, props in entries.items():
lines.append(f"libwacom:name:{name}:input:{match}*")
lines.extend([f" {p}" for p in props])
lines.append("")
return "\n".join(lines)
def print(self, file=sys.stdout):
header = (
"# hwdb entries for libwacom supported devices",
"# This file is generated by libwacom, do not edit",
"#",
"# The lookup key is a contract between the udev rules and the hwdb entries.",
"# It is not considered public API and may change.",
"",
)
print("\n".join(header), file=file)
for t in self.tablets:
entry = self._tablet_entry(t)
if entry:
print(entry, file=file)
class TabletDatabase:
def __init__(self, path):
self.path = path
self.tablets = sorted(self._load(path))
def _load(self, path):
for file in Path(path).glob("*.tablet"):
config = configparser.ConfigParser()
config.read(file)
for match in config["Device"]["DeviceMatch"].split(";"):
# ignore trailing semicolons
if not match or match == "generic":
continue
# For hwdb entries we don't care about name matches,
# it'll just result in duplicate ID_INPUT_TABLET assignments
# for tablets with re-used usbids and that doesn't matter
try:
bus, vid, pid, *_ = match.split(":")
except ValueError as e:
print(f"Failed to process match {match}")
raise e
name = config["Device"]["Name"]
t = Tablet(name, bus, vid, pid)
try:
t.has_touch = config["Features"]["Touch"].lower() == "true"
if t.has_touch:
integration = config["Device"]["IntegratedIn"]
t.is_touchscreen = (
"Display" in integration or "System" in integration
)
except KeyError:
pass
try:
t.has_pad = int(config["Features"]["Buttons"]) > 0
except KeyError:
pass
yield t
# Guess the udev directory based on path. For the case of /usr/share, the
# udev directory is probably in /usr/lib so let's fallback to that.
def find_udev_base_dir(path):
for parent in path.parents:
d = Path(parent / "udev" / "rules.d")
if d.exists():
return d.parent
# /usr/share but also any custom prefixes
for parent in path.parents:
d = Path(parent / "lib" / "udev" / "rules.d")
if d.exists():
return d.parent
raise FileNotFoundError(path)
# udev's behaviour is that where a file X exists in two locations,
# only the highest-precedence one is read. Our files are supposed to be
# complimentary to the system-installed ones (which default to
# 65-libwacom.hwdb) so we bump the filename number.
def guess_hwdb_filename(basedir):
hwdbdir = Path(basedir) / "hwdb.d"
if not hwdbdir.exists():
raise FileNotFoundError(hwdbdir)
fname = hwdbdir / f"66-libwacom.hwdb"
return fname
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Update the system according to the current set of tablet data files"
)
parser.add_argument(
"path",
nargs="?",
type=Path,
default="/etc/libwacom",
help="Directory to load .tablet files from",
)
# buildsystem-mode is what we use from meson, it changes the
# the behavior to just generate the file and print it
parser.add_argument(
"--buildsystem-mode",
action="store_true",
default=False,
help="be used by the build system only",
)
parser.add_argument(
"--skip-systemd-hwdb-update",
action="store_true",
default=False,
help="Do not run systemd-hwdb --update (Note: updates to tablet files will not be reflected in udev)",
)
parser.add_argument(
"--udev-base-dir",
type=Path,
default=None,
help="The udev base directory (default: guessed based on the path)",
)
ns = parser.parse_args()
db = TabletDatabase(ns.path)
hwdb = HWDBFile()
# Bamboo and Intuos devices connected to the system via Wacom's
# Wireless Accessory Kit appear to udev as having the PID of the
# dongle rather than the actual tablet. Make sure we properly tag
# such devices.
#
# We only really care about this in the official hwdb files
if ns.buildsystem_mode:
wwak = Tablet("Wacom Wireless Accessory Kit", "usb", "056A", "0084")
wwak.has_pad = True
wwak.has_touch = True
hwdb.tablets.append(wwak)
hwdb.tablets.extend(db.tablets)
if ns.buildsystem_mode:
hwdb.print()
else:
try:
udevdir = ns.udev_base_dir or find_udev_base_dir(ns.path)
hwdbfile = guess_hwdb_filename(udevdir)
with open(hwdbfile, "w") as fd:
hwdb.print(fd)
print(f"New hwdb file: {hwdbfile}")
if not ns.skip_systemd_hwdb_update:
subprocess.run(
["systemd-hwdb", "update"],
capture_output=True,
check=True,
text=True,
)
print("Finished, please unplug and replug your device")
except PermissionError as e:
print(f"{e}, please run me as root")
except FileNotFoundError as e:
print(f"Unable to find udev base directory: {e}")
except subprocess.CalledProcessError as e:
print(f"hwdb update failed: {e.stderr}")
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| X11 | Folder | 0755 |
|
|
| aclocal-1.16 | File | 35.18 KB | 0755 |
|
| File | 0 B | 0 |
|
|
| appstream-compose | File | 26.3 KB | 0755 |
|
| appstream-util | File | 98.3 KB | 0755 |
|
| appstreamcli | File | 118.23 KB | 0755 |
|
| File | 0 B | 0 |
|
|
| File | 0 B | 0 |
|
|
| autoconf | File | 14.85 KB | 0755 |
|
| autoheader | File | 8.82 KB | 0755 |
|
| autom4te | File | 32.69 KB | 0755 |
|
| automake-1.16 | File | 255.91 KB | 0755 |
|
| autoreconf | File | 26.3 KB | 0755 |
|
| autoscan | File | 16.77 KB | 0755 |
|
| autoupdate | File | 33.22 KB | 0755 |
|
| broadwayd | File | 130.21 KB | 0755 |
|
| bwrap | File | 70.47 KB | 0755 |
|
| File | 0 B | 0 |
|
|
| c89-gcc | File | 428 B | 0755 |
|
| c99-gcc | File | 454 B | 0755 |
|
| cairo-trace | File | 2.95 KB | 0755 |
|
| canberra-gtk-play | File | 18.2 KB | 0755 |
|
| corelist | File | 15.01 KB | 0755 |
|
| cpan | File | 8.16 KB | 0755 |
|
| cpan5.34-x86_64-linux-gnu | File | 8.18 KB | 0755 |
|
| File | 0 B | 0 |
|
|
| File | 0 B | 0 |
|
|
| curl-config | File | 6.52 KB | 0755 |
|
| dazzle-list-counters | File | 14.13 KB | 0755 |
|
| debconf | File | 2.79 KB | 0755 |
|
| debconf-apt-progress | File | 11.27 KB | 0755 |
|
| debconf-communicate | File | 608 B | 0755 |
|
| debconf-copydb | File | 1.68 KB | 0755 |
|
| debconf-escape | File | 647 B | 0755 |
|
| debconf-set-selections | File | 2.92 KB | 0755 |
|
| debconf-show | File | 1.78 KB | 0755 |
|
| derb | File | 26.88 KB | 0755 |
|
| desktop-file-edit | File | 96.44 KB | 0755 |
|
| desktop-file-install | File | 96.44 KB | 0755 |
|
| desktop-file-validate | File | 76.69 KB | 0755 |
|
| dh_autotools-dev_restoreconfig | File | 1.79 KB | 0755 |
|
| dh_autotools-dev_updateconfig | File | 1.81 KB | 0755 |
|
| dh_girepository | File | 12.88 KB | 0755 |
|
| dumpsexp | File | 18.3 KB | 0755 |
|
| File | 0 B | 0 |
|
|
| File | 0 B | 0 |
|
|
| enc2xs | File | 40.84 KB | 0755 |
|
| encguess | File | 3.01 KB | 0755 |
|
| envsubst | File | 34.38 KB | 0755 |
|
| fc-cache | File | 22.23 KB | 0755 |
|
| fc-cat | File | 18.23 KB | 0755 |
|
| fc-conflist | File | 14.23 KB | 0755 |
|
| fc-list | File | 14.23 KB | 0755 |
|
| fc-match | File | 14.23 KB | 0755 |
|
| fc-pattern | File | 14.23 KB | 0755 |
|
| fc-query | File | 14.23 KB | 0755 |
|
| fc-scan | File | 14.23 KB | 0755 |
|
| fc-validate | File | 14.23 KB | 0755 |
|
| file | File | 26.56 KB | 0755 |
|
| fribidi | File | 26.99 KB | 0755 |
|
| gapplication | File | 22.21 KB | 0755 |
|
| File | 0 B | 0 |
|
|
| File | 0 B | 0 |
|
|
| File | 0 B | 0 |
|
|
| File | 0 B | 0 |
|
|
| File | 0 B | 0 |
|
|
| File | 0 B | 0 |
|
|
| gdbus | File | 54.21 KB | 0755 |
|
| gdbus-codegen | File | 1.99 KB | 0755 |
|
| gdk-pixbuf-csource | File | 14.15 KB | 0755 |
|
| gdk-pixbuf-pixdata | File | 14.13 KB | 0755 |
|
| gdk-pixbuf-thumbnailer | File | 18.21 KB | 0755 |
|
| genbrk | File | 14.78 KB | 0755 |
|
| gencat | File | 26.37 KB | 0755 |
|
| gencfu | File | 14.73 KB | 0755 |
|
| gencnval | File | 26.61 KB | 0755 |
|
| gendict | File | 26.78 KB | 0755 |
|
| genrb | File | 147.91 KB | 0755 |
|
| getconf | File | 34.29 KB | 0755 |
|
| getent | File | 38.65 KB | 0755 |
|
| gettext | File | 34.38 KB | 0755 |
|
| gettext.sh | File | 5.07 KB | 0755 |
|
| gettextize | File | 41.28 KB | 0755 |
|
| gio | File | 102.23 KB | 0755 |
|
| gio-querymodules | File | 18.13 KB | 0755 |
|
| gjs | File | 26.7 KB | 0755 |
|
| gjs-console | File | 26.7 KB | 0755 |
|
| glib-compile-schemas | File | 218.79 KB | 0755 |
|
| File | 0 B | 0 |
|
|
| gobject-query | File | 14.14 KB | 0755 |
|
| File | 0 B | 0 |
|
|
| gpg-error-config | File | 2.04 KB | 0755 |
|
| gpgrt-config | File | 13.11 KB | 0755 |
|
| File | 0 B | 0 |
|
|
| gresource | File | 26.13 KB | 0755 |
|
| gsettings | File | 30.21 KB | 0755 |
|
| gsound-play | File | 18.21 KB | 0755 |
|
| gtk-encode-symbolic-svg | File | 22.24 KB | 0755 |
|
| gtk-launch | File | 18.29 KB | 0755 |
|
| gtk-query-settings | File | 14.13 KB | 0755 |
|
| gtk-update-icon-cache | File | 38.57 KB | 0755 |
|
| gtk4-broadwayd | File | 150.22 KB | 0755 |
|
| gtk4-encode-symbolic-svg | File | 8.58 MB | 0755 |
|
| gtk4-launch | File | 18.29 KB | 0755 |
|
| gtk4-query-settings | File | 14.13 KB | 0755 |
|
| gtk4-rendernode-tool | File | 30.13 KB | 0755 |
|
| hb-info | File | 54.21 KB | 0755 |
|
| hb-ot-shape-closure | File | 46.21 KB | 0755 |
|
| hb-shape | File | 50.21 KB | 0755 |
|
| hb-subset | File | 46.18 KB | 0755 |
|
| hb-view | File | 82.35 KB | 0755 |
|
| hmac256 | File | 18.7 KB | 0755 |
|
| iconv | File | 66.41 KB | 0755 |
|
| icuexportdata | File | 30.98 KB | 0755 |
|
| icuinfo | File | 14.62 KB | 0755 |
|
| ifnames | File | 4.08 KB | 0755 |
|
| instmodsh | File | 4.27 KB | 0755 |
|
| ispell-wrapper | File | 7.05 KB | 0755 |
|
| itstool | File | 67.8 KB | 0755 |
|
| js102 | File | 28.97 MB | 0755 |
|
| js102-config | File | 2.03 KB | 0755 |
|
| json-glib-format | File | 18.38 KB | 0755 |
|
| json-glib-validate | File | 14.24 KB | 0755 |
|
| json_pp | File | 4.88 KB | 0755 |
|
| File | 0 B | 0 |
|
|
| File | 0 B | 0 |
|
|
| File | 0 B | 0 |
|
|
| ldd | File | 5.32 KB | 0755 |
|
| libgcrypt-config | File | 4.52 KB | 0755 |
|
| libinput | File | 62.35 KB | 0755 |
|
| libnetcfg | File | 15.41 KB | 0755 |
|
| libpng-config | File | 2.41 KB | 0755 |
|
| libpng16-config | File | 2.41 KB | 0755 |
|
| libtool | File | 366.5 KB | 0755 |
|
| libtoolize | File | 128.35 KB | 0755 |
|
| libwacom-list-devices | File | 14.24 KB | 0755 |
|
| libwacom-list-local-devices | File | 18.29 KB | 0755 |
|
| libwacom-show-stylus | File | 5.99 KB | 0755 |
|
| libwacom-update-db | File | 8.99 KB | 0755 |
|
| locale | File | 57.56 KB | 0755 |
|
| localedef | File | 326.96 KB | 0755 |
|
| File | 0 B | 0 |
|
|
| lzmainfo | File | 14.23 KB | 0755 |
|
| m4 | File | 154.37 KB | 0755 |
|
| makeconv | File | 50.89 KB | 0755 |
|
| mako-render | File | 961 B | 0755 |
|
| markdown_py | File | 973 B | 0755 |
|
| mpicalc | File | 22.3 KB | 0755 |
|
| msgattrib | File | 26.38 KB | 0755 |
|
| msgcat | File | 26.38 KB | 0755 |
|
| msgcmp | File | 26.38 KB | 0755 |
|
| msgcomm | File | 26.38 KB | 0755 |
|
| msgconv | File | 22.38 KB | 0755 |
|
| msgen | File | 22.38 KB | 0755 |
|
| msgexec | File | 22.38 KB | 0755 |
|
| msgfilter | File | 34.38 KB | 0755 |
|
| msgfmt | File | 82.59 KB | 0755 |
|
| msggrep | File | 114.46 KB | 0755 |
|
| msginit | File | 66.39 KB | 0755 |
|
| msgmerge | File | 74.41 KB | 0755 |
|
| msgunfmt | File | 34.39 KB | 0755 |
|
| msguniq | File | 22.38 KB | 0755 |
|
| ngettext | File | 34.38 KB | 0755 |
|
| nspr-config | File | 2.58 KB | 0755 |
|
| nss-config | File | 2.31 KB | 0755 |
|
| p11-kit | File | 170.45 KB | 0755 |
|
| pango-list | File | 18.13 KB | 0755 |
|
| pango-segmentation | File | 18.21 KB | 0755 |
|
| pango-view | File | 66.42 KB | 0755 |
|
| pcre-config | File | 2.29 KB | 0755 |
|
| pcre2-config | File | 1.93 KB | 0755 |
|
| pdfattach | File | 22.21 KB | 0755 |
|
| pdfdetach | File | 26.32 KB | 0755 |
|
| pdffonts | File | 22.33 KB | 0755 |
|
| pdfimages | File | 42.33 KB | 0755 |
|
| pdfinfo | File | 62.33 KB | 0755 |
|
| pdfseparate | File | 22.21 KB | 0755 |
|
| pdfsig | File | 42.6 KB | 0755 |
|
| pdftocairo | File | 190.3 KB | 0755 |
|
| pdftohtml | File | 118.23 KB | 0755 |
|
| pdftoppm | File | 34.24 KB | 0755 |
|
| pdftops | File | 34.34 KB | 0755 |
|
| pdftotext | File | 50.34 KB | 0755 |
|
| pdfunite | File | 34.21 KB | 0755 |
|
| perl5.34-x86_64-linux-gnu | File | 14.3 KB | 0755 |
|
| perlbug | File | 44.12 KB | 0755 |
|
| perldoc | File | 125 B | 0755 |
|
| perlivp | File | 10.61 KB | 0755 |
|
| perlthanks | File | 44.12 KB | 0755 |
|
| piconv | File | 8.16 KB | 0755 |
|
| pip | File | 225 B | 0755 |
|
| pip3 | File | 225 B | 0755 |
|
| pip3.10 | File | 225 B | 0755 |
|
| pipewire | File | 14.38 KB | 0755 |
|
| pkgdata | File | 43.53 KB | 0755 |
|
| pldd | File | 22.37 KB | 0755 |
|
| pod2html | File | 4.04 KB | 0755 |
|
| pod2man | File | 14.68 KB | 0755 |
|
| pod2text | File | 10.55 KB | 0755 |
|
| pod2usage | File | 4.01 KB | 0755 |
|
| podchecker | File | 3.57 KB | 0755 |
|
| psl | File | 22.16 KB | 0755 |
|
| psl-make-dafsa | File | 22.21 KB | 0755 |
|
| ptar | File | 3.48 KB | 0755 |
|
| ptardiff | File | 2.58 KB | 0755 |
|
| ptargrep | File | 4.29 KB | 0755 |
|
| pw-cat | File | 138.38 KB | 0755 |
|
| pw-cli | File | 134.38 KB | 0755 |
|
| pw-dot | File | 34.38 KB | 0755 |
|
| pw-dsdplay | File | 138.38 KB | 0755 |
|
| pw-dump | File | 94.38 KB | 0755 |
|
| pw-link | File | 30.38 KB | 0755 |
|
| pw-loopback | File | 18.38 KB | 0755 |
|
| pw-metadata | File | 14.38 KB | 0755 |
|
| pw-mididump | File | 34.38 KB | 0755 |
|
| pw-midiplay | File | 138.38 KB | 0755 |
|
| pw-midirecord | File | 138.38 KB | 0755 |
|
| pw-mon | File | 90.42 KB | 0755 |
|
| pw-play | File | 138.38 KB | 0755 |
|
| pw-profiler | File | 26.38 KB | 0755 |
|
| pw-record | File | 138.38 KB | 0755 |
|
| pw-reserve | File | 26.38 KB | 0755 |
|
| pw-top | File | 30.38 KB | 0755 |
|
| pw-v4l2 | File | 1.95 KB | 0755 |
|
| py3compile | File | 12.89 KB | 0755 |
|
| py3versions | File | 11.63 KB | 0755 |
|
| python3.10 | File | 5.66 MB | 0755 |
|
| recode-sr-latin | File | 14.38 KB | 0755 |
|
| rsvg-convert | File | 5.53 MB | 0755 |
|
| secret-tool | File | 22.21 KB | 0755 |
|
| select-default-iwrap | File | 474 B | 0755 |
|
| session-migration | File | 22.15 KB | 0755 |
|
| shasum | File | 9.75 KB | 0755 |
|
| spa-acp-tool | File | 268.12 KB | 0755 |
|
| spa-inspect | File | 78.48 KB | 0755 |
|
| spa-json-dump | File | 14.3 KB | 0755 |
|
| spa-monitor | File | 14.48 KB | 0755 |
|
| spa-resample | File | 30.6 KB | 0755 |
|
| splain | File | 18.96 KB | 0755 |
|
| streamzip | File | 7.75 KB | 0755 |
|
| tzselect | File | 15.02 KB | 0755 |
|
| uconv | File | 54.83 KB | 0755 |
|
| unxz | File | 82.52 KB | 0755 |
|
| update-desktop-database | File | 22.38 KB | 0755 |
|
| update-mime-database | File | 58.23 KB | 0755 |
|
| xdg-dbus-proxy | File | 50.14 KB | 0755 |
|
| xdg-user-dir | File | 234 B | 0755 |
|
| xdg-user-dirs-update | File | 26.23 KB | 0755 |
|
| xml2-config | File | 1.44 KB | 0755 |
|
| xmlcatalog | File | 22.3 KB | 0755 |
|
| xmllint | File | 78.95 KB | 0755 |
|
| xz | File | 82.52 KB | 0755 |
|
| xzcat | File | 82.52 KB | 0755 |
|
| xzcmp | File | 6.86 KB | 0755 |
|
| xzdiff | File | 6.86 KB | 0755 |
|
| xzegrep | File | 5.87 KB | 0755 |
|
| xzfgrep | File | 5.87 KB | 0755 |
|
| xzgrep | File | 5.87 KB | 0755 |
|
| xzless | File | 1.76 KB | 0755 |
|
| xzmore | File | 2.11 KB | 0755 |
|
| zdump | File | 26.21 KB | 0755 |
|
| zipdetails | File | 58.66 KB | 0755 |
|