# [solved] Udev-rules für Grafiktablett

## MarcenX

Hallo zusammen,

Will gerne eine udev-rules  für mein Grafiktablett erstellen, wo es dann die Sachen von xsetwacom lädt, beim einstecken.

Ich hab dann ein Script erstellt, mit meinen Einstellungen, nur lädt udev das nicht.

Hab mehrere udev-rules probiert, leider alle ohne Erfolg. Oder ist der Ansatz falsch?

```
SUBSYSTEM=="input", ATTR{name}=="Wacom Intuos4 6x9", RUN+="/home/user/scripte/xsetwacom.sh"
```

```
SUBSYSTEM=="usb", ATTRS{product}=="PTK-640", RUN+="/home/user/scripte/xsetwacom.sh"
```

wenn ich es mit udevadm test --action=add teste wird es auch geladen.

```
udev_device_new_from_syspath: device 0x61f140 has devpath '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0/input/input8'

udev_rules_apply_to_event: RUN '/sbin/modprobe -b $env{MODALIAS}' /lib64/udev/rules.d/80-drivers.rules:5

udev_rules_apply_to_event: RUN 'socket:@/org/freedesktop/hal/udev_event' /etc/udev/rules.d/90-hal.rules:2

udev_rules_apply_to_event: RUN '/home/user/scripte/xsetwacom.sh' /etc/udev/rules.d/99-users-local.rules:8

udevadm_test: UDEV_LOG=6

udevadm_test: DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0/input/input8

udevadm_test: PRODUCT=3/56a/b9/104

udevadm_test: NAME="Wacom Intuos4 6x9"

udevadm_test: EV==1f

udevadm_test: KEY==1cff 1f01ff 0 0 0 0

udevadm_test: REL==100

udevadm_test: ABS==1000f000167

udevadm_test: MSC==1

udevadm_test: MODALIAS=input:b0003v056Ap00B9e0104-e0,1,2,3,4,k100,101,102,103,104,105,106,107,108,110,111,112,113,114,140,141,142,143,144,145,146,147,14A,14B,14C,r8,a0,1,2,5,6,8,18,19,1A,1B,28,m0,lsfw

udevadm_test: ACTION=add

udevadm_test: SUBSYSTEM=input

udevadm_test: run: '/sbin/modprobe -b input:b0003v056Ap00B9e0104-e0,1,2,3,4,k100,101,102,103,104,105,106,107,108,110,111,112,113,114,140,141,142,143,144,145,146,147,14A,14B,14C,r8,a0,1,2,5,6,8,18,19,1A,1B,28,m0,lsfw'

udevadm_test: run: 'socket:@/org/freedesktop/hal/udev_event'

udevadm_test: run: '/home/user/scripte/xsetwacom.sh'
```

Bin dankbar für jeden Tipp.Last edited by MarcenX on Fri Mar 18, 2011 8:44 pm; edited 3 times in total

----------

## Christian99

Naja, als erstes solltest du mal schaun, ob das skript einfach so, ohne udev, läuft, aber ich gehe mal davon aus, dass das der Fall ist. Probeier doch auch mal, ausgaben des skrptes in eine datei umzuleiten, müsstest du direkt an die udevregel anhängen können: RUN+="/home/user/scripte/xsetwacom.sh > /home/user/udev.log". wenn das skript keine ausgaben erzeugt, dann füg ganz am anfang, ein echo test oder so ein. wenn die entsprechende datei angelegt wird, dann weißt du zumindest schon mal, dass es am skript liegt, und nicht an udev.

----------

## MarcenX

Danke das hat mir schon sehr geholfen.

Meine Udev-rules stimmt nicht.

Hab die Daten für die Regel vom 1. Auszug genommen. 

 *Quote:*   

>   looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0/input/input12':
> 
>     KERNEL=="input12"
> 
>     SUBSYSTEM=="input"
> ...

 

EDIT: Hab mal geschaut ob es mit der Digicam geht, das geht auch nicht. Was aber früher mal ging.

Gibt es eine Option wo custom rules nicht zugelassen werden?

----------

## aleph-muc

Hi MarcenX,

vielleicht liegt es daran, dass Du in deinen Rules 

```
SUBSYSTEM==
```

stehen hat, in der Liste unten aber  

```
SUBSYSTEMS==
```

 angezeigt wird.

Grüße

aleph

----------

## MarcenX

Da hat echt das S gefehlt und auch zu kurz war sie auch.

Da die rule zu kurz war hat udev sie beim einstecken mehrmals angewandt, was dann den run-befehlt aufhebt wahrscheinlich.

```
# udevadm monitor

monitor will print the received events for:

UDEV - the event which udev sends out after rule processing

KERNEL - the kernel uevent

KERNEL[1300132398.525716] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8 (usb)

KERNEL[1300132398.526213] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0 (usb)

KERNEL[1300132398.526257] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0/input/input84 (input)

KERNEL[1300132398.526313] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0/input/input84/mouse2 (input)

KERNEL[1300132398.526348] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0/input/input84/event7 (input)

UDEV  [1300132398.529950] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8 (usb)

UDEV  [1300132398.530100] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0 (usb)

UDEV  [1300132398.531667] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0/input/input84 (input)

UDEV  [1300132398.541512] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0/input/input84/mouse2 (input)

UDEV  [1300132398.655347] add      /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0/input/input84/event7 (input)
```

Jetzt ist sie so, das es zum Schluss ausgeführt wird, hoffe ich. Also zum event*

```
ACTION=="add", SUBSYSTEMS=="usb", DRIVERS=="usb", KERNEL=="event*", ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00b9", RUN+="/home/user/scripte/xsetwacom.sh"
```

Aber udev führt immer noch nicht mein Script aus. Nur bestimmte arten von scripts.

Das test-script geht auch nicht

```
#!/bin/sh

/usr/bin/firefox
```

Und das Script geht. Beim ersten einstecken mute und beim zweiten wieder entmuten.

 *Quote:*   

> #!/bin/sh
> 
> #
> 
> # A Script to mute/unmute the alsa mixer.
> ...

 

und was es mal werden soll.

```
#!/bin/sh

DEVICE="Wacom Intuos4 6x9"

STYLUS="$DEVICE stylus"

ERASER="$DEVICE eraser"

PAD="$DEVICE pad"

# Express Tasten oben

xsetwacom set "$PAD" Button2 "key ctrl"

xsetwacom set "$PAD" Button3 "key ALT"

xsetwacom set "$PAD" Button4 "key SHIFT"

xsetwacom set "$PAD" Button5 "key 5"

xsetwacom set "$PAD" Button1 "key 1"   # Taste in der Mitte vom Touchring

xsetwacom set "$PAD" AbsWUp "key plus"   # Touchkring im Uhrzeigersinn

xsetwacom set "$PAD" AbsWDn "key minus"   # Touchkring gegen den Uhrzeigersinn

# Express Tasten unten

xsetwacom set "$PAD" Button6 "key SHIFT q"      # Schnellmaske

xsetwacom set "$PAD" Button7 "key SHIFT CTRL n"      # Navigationsfenster

xsetwacom set "$PAD" Button8 "key CTRL y"      # Vorwärs

xsetwacom set "$PAD" Button9 "key CTRL z"      # Zurück
```

Danke für die Tipps, haben mich echt weiter gebracht.

----------

## Christian99

das firefox nicht gehen kann ist logisch. der braucht ja eine DISPLAY-Variable, und die wird vond udev unter Garantie nicht gesetzt. Hast du denn das skript schon mal direkt, ohne udev ausgeführt?

Oh, jetzt wo wir gerade von DISPLAY-Variablen reden: ich kenn zwar xsetwacom nicht, vermude aber, dass es so ähnlich ist wie setxkbmap, richtig? setxbmap braucht auch die DISPLAY-Variable, weil es ja einfluss nimmt auf den X-Server. füg doch mal zu Beginn deines Skriptes "DISPLAY=:0" irgendwo ein, oder so. Das ist zwar etwas unsauber (was passiert wenn kein X-Server läuft, wenn du  das tablet einsteckst? ) aber spontan fällt mir nix besseres ein.

----------

## MarcenX

Hallo,

leider geht mit der DISPLAY-Variable auch nichts.

```

#!/bin/sh

"DISPLAY=:0"

/usr/bin/xsetwacom set "Wacom Intuos4 6x9 pad" Button9 "key CTRL z"
```

Wenn ich das Script in der Konsole starte, braucht er ein X-Server.

```
Error: no display specified

Failed to open Display
```

Muss mal suchen wie das geht, mit der DISPLAY-Variable.

Sonst geht das Script unter X aus der Konsole.

----------

## Necoro

 *MarcenX wrote:*   

> Hallo,
> 
> leider geht mit der DISPLAY-Variable auch nichts.
> 
> ```
> ...

 

Kann auch nicht gehen -- sollte ja auch so aussehen:

```

#!/bin/sh

DISPLAY=:0 /usr/bin/xsetwacom set "Wacom Intuos4 6x9 pad" Button9 "key CTRL z"

```

----------

## Christian99

sorry, hätte statt der anführungszeichen Code-tags nehmen sollen.

wenn du es wie necoro geschrieben, an den Anfang einer Zeile setzt, gilt es nur für diese Zeile. Wenn du es an den Anfang des Skrptes setzt ( ohne Anführungszeichen), dann sollte es für alles nachfolgende gelten. (Bitte um Korrektur, falls nötig, bin nicht so der shell-experte)

----------

## Necoro

Damit es für alle nachfolgenden gilt, musst du:

```
export DISPLAY=:0
```

machen -- ansonsten ist es eine Shell-Variable, die nur innerhalb des Skripts (und nicht der vom Skript gestarten Prozesse gilt)

----------

## Christian99

danke, wieder was gelernt  :Smile: 

----------

## MarcenX

Super, danke euch vielmals . Jetzt geht es  :Smile: 

```
#!/bin/sh

export DISPLAY=:0.0

#

# Mit xsetwacom --list dev den dev_name herrausfinden und unter DEVICE eintragen.

#

DEVICE="Wacom Intuos4 6x9"

STYLUS="$DEVICE stylus"

ERASER="$DEVICE eraser"

PAD="$DEVICE pad"

# Express Tasten oben

xsetwacom set "$PAD" Button2 "key ctrl"&

xsetwacom set "$PAD" Button3 "key ALT"&

xsetwacom set "$PAD" Button4 "key SHIFT"&

xsetwacom set "$PAD" Button5 "key 5"&

xsetwacom set "$PAD" Button1 "key 1"&      # Taste in der Mitte vom Touchring

xsetwacom set "$PAD" AbsWUp "key plus"&      # Touchkring im Uhrzeigersinn

xsetwacom set "$PAD" AbsWDn "key minus"&   # Touchkring gegen den Uhrzeigersinn

# Express Tasten unten

xsetwacom set "$PAD" Button6 "key SHIFT q"&      # Schnellmaske

xsetwacom set "$PAD" Button7 "key SHIFT CTRL n"&   # Neue Ebene

xsetwacom set "$PAD" Button8 "key CTRL y"&      # Vorwärs

xsetwacom set "$PAD" Button9 "key CTRL z"&      # Zurück
```

Nur mit & sonst nicht

Hier noch die udev rule dazu

```
ACTION=="add", SUBSYSTEMS=="usb", DRIVERS=="usb", KERNEL=="event*", ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00b9", RUN+="/home/user/scripte/xsetwacom.sh"
```

----------

## MarcenX

Ok geht doch nur wenn ich vorher mit 

```
xhost local:
```

 setze in der Konsole. Der Befehl geht im Script nicht. 

Hat da einer eine Idee, wie das doch im Script geht?

----------

## MarcenX

So

jetzt hab ich die richtigen Einstellungen gefunden.

```
#!/bin/sh

export XAUTHORITY=/home/user/.Xauthority

export DISPLAY=:0.0 

DEVICE="Wacom Intuos4 6x9"

STYLUS="$DEVICE stylus"

ERASER="$DEVICE eraser"

PAD="$DEVICE pad"

# Express Tasten oben

xsetwacom set "$PAD" Button2 "key ctrl" &

xsetwacom set "$PAD" Button3 "key alt" &

xsetwacom set "$PAD" Button4 "key shift" &

xsetwacom set "$PAD" Button5 "key 5" &

xsetwacom set "$PAD" Button1 "key 1" &      # Taste in der Mitte vom Touchring

xsetwacom set "$PAD" AbsWUp "key plus" &   # Touchkring im Uhrzeigersinn

xsetwacom set "$PAD" AbsWDn "key minus" &   # Touchkring gegen den Uhrzeigersinn

# Express Tasten unten

xsetwacom set "$PAD" Button6 "key shift q" &      # Schnellmaske

xsetwacom set "$PAD" Button7 "key shift ctrl n" &   # Navigationsfenster

xsetwacom set "$PAD" Button8 "key ctrl y" &      # Vorwärs

xsetwacom set "$PAD" Button9 "key ctrl z" &      # Zurück

exit
```

----------

## Christian99

 *MarcenX wrote:*   

> 
> 
> ```
> 
> export XAUTHORITY=/home/user/.Xauthority
> ...

 

äh, kein Plan, aber du hast dich offensichtlich damit beschäftigt. was ist das?

Da steht was von magischen Keksen drin. wie schmecken die wohl?!?

----------

## MarcenX

Hmm bestimmt magisch   :Very Happy: 

Das ist so ähnlich wie xhost.

Mal schaun ob ich das jetzt so richtig hin bekomme.

Du hast die Datei .Xauthority im Home-Verzeichnis wo bei jeden Einlogen ein Schlüssel erstellt wird.

Mit dem dann der X-Server prüfen kann ob ich mit der Anwendung am Bildschirm anzeigen darf.

Beim Script ist das so

Der Client  schickt die .Xauthority an den Server der schaut dann ob das Display das richtig ist welches ich haben will, wenn ja dann wird das Script aus geführt.

Und die Befehle im Hintergrund ausführen.

mehr dazu hier

----------

## Christian99

ah, vielen dank.

----------

