Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:plg:stift [2021/05/07 18:49] – Ivo Blöchliger | lehrkraefte:blc:plg:stift [2024/01/20 09:59] (current) – Karlheinz Schubert | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | <hidden Probleme mit Kernel 5.8.0-48 und 5.8.0-45> | ||
| + | **Das Problem hast sich mit dem neuesten Update gelöst.** Alles funktioniert wieder besten. | ||
| + | Mir hat ein Downgrade auf Kernel 5.8.0-30 geholfen. Das Problem ist offenbar bekannt und in neueren Kerneln gelöst. Sollte in zukünftigen Kerneln behoben sein. | ||
| + | Für das Downgrade sind folgende 3 Packages zu installieren: | ||
| + | linux-headers-5.8.0-34 linux-image-5.8.0-34-generic linux-modules-5.8.0-34-generic linux-modules-extra-5.8.0-34-generic | ||
| + | Beim Booten muss der korrekte Kernel in " | ||
| + | </ | ||
| + | |||
| + | ====== Stift bei mehreren Bildschirmen ====== | ||
| + | Öhhmm... Im System Settings gibt es dazu Einstellung inklusive Keyboard-Shortcuts... | ||
| + | |||
| + | <hidden Alter Hack meinerseits> | ||
| + | Der Stift wird über die kombinierte Bildschirmbreite gemappt, was natürlich Mist ist. | ||
| + | |||
| + | Folgendes Ruby-Script behebt das Problem, wenn der externe Bildschirm rechts vom Laptopbildschirm mit gleicher (Full-HD) Auflösung ist: (mit Option –u aufrufen, um wieder auf einem Bildschirm zu arbeiten): {{lehrkraefte: | ||
| + | |||
| + | <hidden Neuerer Hack andererseits> | ||
| + | Der Stift wird über die kombinierte Bildschirmbreite/ | ||
| + | |||
| + | Folgendes Python-Script behebt das Problem, indem es den Stift nur auf den TouchScreen des Laptops (eDP-1) mapped: | ||
| + | |||
| + | {{lehrkreafte: | ||
| + | <code python> | ||
| + | # | ||
| + | |||
| + | import subprocess | ||
| + | import re | ||
| + | import sys | ||
| + | |||
| + | # configure you devices: | ||
| + | display_id_wayland = " | ||
| + | device_names_wayland = [" | ||
| + | display_id_x11 = " | ||
| + | device_names_x11 = [" | ||
| + | # end configure | ||
| + | |||
| + | verbose = False | ||
| + | |||
| + | |||
| + | def is_wayland(): | ||
| + | """ | ||
| + | ret_value = cmd(" | ||
| + | return ret_value == " | ||
| + | |||
| + | |||
| + | def cmd(c): | ||
| + | """ | ||
| + | print(c) if verbose else None | ||
| + | res = subprocess.check_output(c, | ||
| + | print(res) if verbose else None | ||
| + | return res | ||
| + | |||
| + | |||
| + | def get_device_id(device_name): | ||
| + | """ | ||
| + | id = re.search(r" | ||
| + | return int(id) if id else 0 | ||
| + | |||
| + | |||
| + | def set_xinput_mapping(device_id, | ||
| + | cmd(f" | ||
| + | |||
| + | |||
| + | if __name__ == " | ||
| + | try: | ||
| + | args = sys.argv[1: | ||
| + | if len(args) > 0 and (" | ||
| + | verbose = True | ||
| + | else: | ||
| + | print(" | ||
| + | is_wayland() | ||
| + | if is_wayland(): | ||
| + | display_id = display_id_wayland | ||
| + | device_names = device_names_wayland | ||
| + | else: | ||
| + | display_id = display_id_x11 | ||
| + | device_names = device_names_x11 | ||
| + | name_length = max([len(n) for n in device_names]) | ||
| + | for device_name in device_names: | ||
| + | device_id = get_device_id(device_name) | ||
| + | print(f" | ||
| + | set_xinput_mapping(device_id, | ||
| + | except Exception as e: | ||
| + | print(e) | ||
| + | print("" | ||
| + | input(" | ||
| + | |||
| + | </ | ||
| + | |||
| + | Mit --verbose (oder -v) aufrufen, um //xinput// Ausgaben zu zeigen. | ||
| + | </ | ||