lehrkraefte:blc:plg:stift

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:plg:stift [2023/11/03 10:44]
Karlheinz Schubert
lehrkraefte:blc:plg:stift [2024/01/20 10:59] (current)
Karlheinz Schubert
Line 7: Line 7:
 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. 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> </hidden>
 +
 ====== Stift bei mehreren Bildschirmen ====== ====== Stift bei mehreren Bildschirmen ======
 Öhhmm... Im System Settings gibt es dazu Einstellung inklusive Keyboard-Shortcuts... Öhhmm... Im System Settings gibt es dazu Einstellung inklusive Keyboard-Shortcuts...
  
 <hidden Alter Hack meinerseits> <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>+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>
  
-<hidden Alter Hack andererseits> +Mit --verbose (oder -vaufrufen, um //xinput// Ausgaben zu zeigen. 
-Der Stift wird über die kombinierte Bildschirmbreite gemappt, was natürlich Mist ist. Folgendes Python-Script behebt das Problem, indem er den Stift nur auf den TouchScreen des Laptops (eDP-1mapped: {{lehrkraefte:sbt:map-pen.py}}. </hidden>+</hidden>
  • lehrkraefte/blc/plg/stift.1699004649.txt.gz
  • Last modified: 2023/11/03 10:44
  • by Karlheinz Schubert