lehrkraefte:blc:plg:stift

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
lehrkraefte:blc:plg:stift [2021/03/11 07:38]
Ivo Blöchliger created
lehrkraefte:blc:plg:stift [2024/01/20 10: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 "Advanced Options" ausgewählt werden. Man kann den auch fest verdrahten, ist es mir im Moment aber nicht wert.
 +</hidden>
 +
 ====== Stift bei mehreren Bildschirmen ====== ====== Stift bei mehreren Bildschirmen ======
-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:blc:plg:adjust-pen-for-double-screen.rb}}. +Ö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:blc:plg:adjust-pen-for-double-screen.rb}}. </hidden> 
 + 
 +<hidden Neuerer Hack andererseits> 
 +Der Stift wird über die kombinierte Bildschirmbreite/~höhe gemappt, was natürlich Mist ist.  
 + 
 +Folgendes Python-Script behebt das Problem, indem es den Stift nur auf den TouchScreen des Laptops (eDP-1) mapped:  
 + 
 +{{lehrkreafte:sbt:map-pen.py |}} 
 +<code python> 
 +#!/usr/bin/env -S python3 
 + 
 +import subprocess 
 +import re 
 +import sys 
 + 
 +# configure you devices: 
 +display_id_wayland = "XWAYLAND0" 
 +device_names_wayland = ["xwayland-touch", "xwayland-tablet stylus", "xwayland-tablet eraser", "xwayland-tablet cursor"
 +display_id_x11 = "eDP-1" 
 +device_names_x11 = ["Wacom Pen and multitouch sensor Finger touch", "Wacom Pen and multitouch sensor Pen stylus", "Wacom Pen and multitouch sensor Pen eraser"
 +# end configure 
 + 
 +verbose = False 
 + 
 + 
 +def is_wayland(): 
 +    """check sessiontype (Wayland or X11)""" 
 +    ret_value = cmd("echo $XDG_SESSION_TYPE").lower() 
 +    return ret_value == "wayland\n" 
 + 
 + 
 +def cmd(c): 
 +    """run shell command and return output, if verbose print command and output""" 
 +    print(c) if verbose else None 
 +    res = subprocess.check_output(c, shell=True).decode() 
 +    print(res) if verbose else None 
 +    return res 
 + 
 + 
 +def get_device_id(device_name): 
 +    """get xinput device id for device name""" 
 +    id = re.search(r"id=(\d+)", [l for l in cmd("xinput").split("\n") if re.search(device_name, l)][0]).group(1) 
 +    return int(id) if id else 0 
 + 
 + 
 +def set_xinput_mapping(device_id, display_id): 
 +    cmd(f"xinput map-to-output {device_id} {display_id}"
 + 
 + 
 +if __name__ == "__main__": 
 +    try: 
 +        args = sys.argv[1:
 +        if len(args) > 0 and ("-v" in args or "--verbose" in args): 
 +            verbose = True 
 +        else: 
 +            print("Use -v or --verbose to see xinput output\nSet mappings:"
 +        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" - Map {device_name:{name_length}} with Id={device_id:02d} to '{display_id}'"
 +            set_xinput_mapping(device_id, display_id) 
 +    except Exception as e: 
 +        print(e) 
 +    print(""
 +    input("Press Enter to continue..."
 + 
 +</code>.  
 + 
 +Mit --verbose (oder -v) aufrufen, um //xinput// Ausgaben zu zeigen. 
 +</hidden>
  • lehrkraefte/blc/plg/stift.1615444718.txt.gz
  • Last modified: 2021/03/11 07:38
  • by Ivo Blöchliger