Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2012-02-08 00:22:12

  lewd - Użytkownik

lewd
Użytkownik
Zarejestrowany: 2012-02-07

A4tech G9-500F w linuksie

Witam.

Zastanawiam się czy ktoś próbował skonfigurować czwarty przycisk tytułowej myszy w debianie (lub innej dystrybucji). Sama mysz działa bez zarzutu, jednak producent w dziwny sposób załatwił sprawę obsługę przycisku.
Postaram się przybliżyć całe zagadnienie. Mysz jest bezprzewodowa więc do komputera podłączamy mini odbiornik usb, który jest w systemie wykrywany jako para urządzeń hid: klawiatura i mysz.

Kod:

dmesg:
[  574.941008] input: A4TECH USB Device as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/input/input11
[  574.941984] generic-usb 0003:09DA:054F.0007: input,hiddev0,hidraw2: USB HID v1.11 Keyboard [A4TECH USB Device] on usb-0000:00:1d.0-1.2/input0
[  574.943164] input: A4TECH USB Device as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.1/input/input12
[  574.943589] generic-usb 0003:09DA:054F.0008: input,hidraw3: USB HID v1.11 Mouse [A4TECH USB Device] on usb-0000:00:1d.0-1.2/input1

lsusb:
Bus 002 Device 006: ID 09da:054f A4 Tech Co., Ltd

Mysz ma 3 przyciski (dwa standard + scroll) i jeden dodatkowy który w systemach Windows można konfigurować przy pomocy aplikacji 'sterownika'. Wciśnięcie przycisku bez owego sterownika w systemach MS skutkuje wysłaniem kombinacji "ctrl+rwww.win2.cn/g9" (zgaduję, że to wywołanie leci z tej nieistniejącej klawiatury). Powoduje to włączenie przeglądarki/zakładki www z adresem www.win2.cn/g9 , gdzie można znaleźć program dzięki któremu skonfigurujemy mysz. Sęk w tym, że wciśnięcie tego przycisku w linuksie skutkuje wysłaniem tej samej kombinacji klawiszy do systemu co jest tutaj bezużyteczne bo nie znajdziemy na tamtej stronie nic pod linuksa.

Macie jakąś radę, da się to jakoś obejść/ustawić żeby móc wykorzystać dodatkowy przycisk?

Druga sprawa, jak wyłączyć w systemie tą nadmiarową 'klawiaturę'?
Jej obecność utrudnia pisanie i testowanie softu. Przykład: python/pygame wykrywa tą 'klawiaturę' jako joystick przez co miesza zgłaszając nieistniejący kontroler.

Ostatnio edytowany przez lewd (2012-02-08 00:26:06)

Offline

 

#2  2012-02-08 10:16:22

  NIC - Członek DUG

NIC
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-12-25
Serwis

Re: A4tech G9-500F w linuksie

Wyłączyć się nie da, bo to jednak jest w pełni sprawne urządzenie. Co więcej mógłbyś chcieć nią grać.
Skoro w linuksie odbierasz sygnał od tej klawiatury to powinno też dać się przypisać coś do tego.

Więc z racji iż jest to klawiatura to pod Xsem winno "xev" go jakoś wychwicić, jak to wygląda?

Opcjonalnie możesz dorzucić "lsusb -v" dla tego urządzenia "lsusb -vd 09da:054f"

Jeśli jest tam:

Report Descriptors:
           ** UNAVAILABLE **[/quote]
Więc najciekawszej informacji nie ma...
Więc trzeba odbindować to urządzenie by uzyskać te informacje (niemalże programowo odłączyć je od komputera, tak więc nie działa [cieszyć się że to nie główna klawiatura])

Kod:

dmesg | grep "input: A4TECH USB Device" # stąd łowi się te numerki z ech poniżej
echo "2-1.2:1.0" > /sys/bus/usb/drivers/usbhid/unbind
echo "2-1.2:1.1" > /sys/bus/usb/drivers/usbhid/unbind
lsusb -vd 09da:054f
echo "2-1.2:1.0" > /sys/bus/usb/drivers/usbhid/bind
echo "2-1.2:1.1" > /sys/bus/usb/drivers/usbhid/bind

Widzę że moduł kernela "hid a4tech" nie zawiera nic dla Twojej myszy, więc tego można w ogóle nie brać pod uwagę (chyba żeby zasadzić tam jakiegoś haka, który zamieni ten sygnał z myszy na coś normalnego)

Kluczowe pytanie: ten przycisk ma działać:
a) pod konsolą
b) pod Xsem
c) pod konsolą i pod Xsem
d) nie chce tego przycisku


Stronka-dom: [url]http://titek.victorygames.pl[/url]
Jabber: nic@jabster.pl
Hobby: kompilowanie Linuksa, Bluetooth
Dystrybucja: żadna, bliski krewny LFS, składak

Offline

 

#3  2012-02-08 13:32:21

  lewd - Użytkownik

lewd
Użytkownik
Zarejestrowany: 2012-02-07

Re: A4tech G9-500F w linuksie

Witam.

Dzięki za odpowiedź i wskazówki.

Zacznę od odpowiedzi na kluczowe pytanie:
Wystarczy żeby przycisk działał w Xach. Jeśli jednak ma to się wiązać z obecnością tej przykrej klawiatury to wolę ją (i tym samym przycisk w myszy) całkowicie wyłączyć, bo zauważyłem że odbindowanie jej pomaga w kwestii domniemanego joysticka. Jeśli nie będzie innej rady to czy istnieje elegancki/debianowy sposób na nie bindowanie tej klawiatury podczas uruchamiania systemu czy pozostaje rc.local?


Wracając do tego co jak gdzie i kiedy:
standardowo xev po wciśnięciu dodatkowego przycisku myszy zwraca serie KeyPress/KeyRelease dla ciągu, o którym pisałem w poprzednim poście (ctrl + rwww...), a lsusb zgłasza wspomniany przez Ciebie  "** UNAVAILABLE **" dla klawiatury i dla myszy

Po odbindowaniu rzekomej klawiatury xev milczy kiedy wciskam czwarty przycisk myszy.

Wklejam jeszcze lsusb po odbindowaniu klawy i myszy.

Kod:

lsusb -vd 09da:054f

Bus 002 Device 007: ID 09da:054f A4 Tech Co., Ltd 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x09da A4 Tech Co., Ltd
  idProduct          0x054f 
  bcdDevice            1.02
  iManufacturer           1 A4TECH
  iProduct                2 USB Device
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           59
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
      iInterface              0                                                                                                                                                                                                                
        HID Device Descriptor:                                                                                                                                                                                                                 
          bLength                 9                                                                                                                                                                                                            
          bDescriptorType        33                                                                                                                                                                                                            
          bcdHID               1.11                                                                                                                                                                                                            
          bCountryCode            0 Not supported                                                                                                                                                                                              
          bNumDescriptors         1                                                                                                                                                                                                            
          bDescriptorType        34 Report                                                                                                                                                                                                     
          wDescriptorLength     132                                                                                                                                                                                                            
          Report Descriptor: (length is 132)                                                                                                                                                                                                   
            Item(Global): Usage Page, data= [ 0x01 ] 1                                                                                                                                                                                         
                            Generic Desktop Controls                                                                                                                                                                                           
            Item(Local ): Usage, data= [ 0x06 ] 6                                                                                                                                                                                              
                            Keyboard                                                                                                                                                                                                           
            Item(Main  ): Collection, data= [ 0x01 ] 1                                                                                                                                                                                         
                            Application                                                                                                                                                                                                        
            Item(Global): Report ID, data= [ 0x01 ] 1                                                                                                                                                                                          
            Item(Global): Usage Page, data= [ 0x07 ] 7                                                                                                                                                                                         
                            Keyboard                                                                                                                                                                                                           
            Item(Local ): Usage Minimum, data= [ 0xe0 ] 224                                                                                                                                                                                    
                            Control Left                                                                                                                                                                                                       
            Item(Local ): Usage Maximum, data= [ 0xe7 ] 231                                                                                                                                                                                    
                            GUI Right                                                                                                                                                                                                          
            Item(Global): Logical Minimum, data= [ 0x00 ] 0                                                                                                                                                                                    
            Item(Global): Logical Maximum, data= [ 0x01 ] 1                                                                                                                                                                                    
            Item(Global): Report Size, data= [ 0x01 ] 1                                                                                                                                                                                        
            Item(Global): Report Count, data= [ 0x08 ] 8                                                                                                                                                                                       
            Item(Main  ): Input, data= [ 0x02 ] 2                                                                                                                                                                                              
                            Data Variable Absolute No_Wrap Linear                                                                                                                                                                              
                            Preferred_State No_Null_Position Non_Volatile Bitfield                                                                                                                                                             
            Item(Global): Report Count, data= [ 0x05 ] 5                                                                                                                                                                                       
            Item(Global): Report Size, data= [ 0x01 ] 1
            Item(Global): Usage Page, data= [ 0x08 ] 8
                            LEDs
            Item(Local ): Usage Minimum, data= [ 0x01 ] 1
                            NumLock
            Item(Local ): Usage Maximum, data= [ 0x05 ] 5
                            Kana
            Item(Main  ): Output, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Global): Report Size, data= [ 0x03 ] 3
            Item(Main  ): Output, data= [ 0x01 ] 1
                            Constant Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Report Count, data= [ 0x0a ] 10
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xa4 0x00 ] 164
            Item(Global): Usage Page, data= [ 0x07 ] 7
                            Keyboard
            Item(Local ): Usage Minimum, data= [ 0x00 ] 0
                            No Event
            Item(Local ): Usage Maximum, data= [ 0xa4 0x00 ] 164
                            ExSel
            Item(Main  ): Input, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
            Item(Global): Usage Page, data= [ 0x01 ] 1
                            Generic Desktop Controls
            Item(Local ): Usage, data= [ 0x80 ] 128
                            System Control
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Report ID, data= [ 0x02 ] 2
            Item(Local ): Usage Minimum, data= [ 0x00 ] 0
                            Undefined
            Item(Local ): Usage Maximum, data= [ 0xb7 ] 183
                            (null)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xb7 0x00 ] 183
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Main  ): Input, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
            Item(Global): Usage Page, data= [ 0x0c ] 12
                            Consumer
            Item(Local ): Usage, data= [ 0x01 ] 1
                            Consumer Control
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Report ID, data= [ 0x03 ] 3
            Item(Local ): Usage Minimum, data= [ 0x00 ] 0
                            Unassigned
            Item(Local ): Usage Maximum, data= [ 0x3c 0x02 ] 572
                            AC Format
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0x3c 0x02 ] 572
            Item(Global): Report Size, data= [ 0x10 ] 16
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
            Item(Global): Usage Page, data= [ 0xa0 0xff ] 65440
                            (null)
            Item(Local ): Usage, data= [ 0xa5 ] 165
                            (null)
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Report ID, data= [ 0x04 ] 4
            Item(Local ): Usage, data= [ 0xa6 ] 166
                            (null)
            Item(Global): Logical Minimum, data= [ 0x80 ] 128
            Item(Global): Logical Maximum, data= [ 0x7f ] 127
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x000c  1x 12 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      2 Mouse
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      87
          Report Descriptor: (length is 87)
            Item(Global): Usage Page, data= [ 0x01 ] 1
                            Generic Desktop Controls
            Item(Local ): Usage, data= [ 0x02 ] 2
                            Mouse
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Local ): Usage, data= [ 0x01 ] 1
                            Pointer
            Item(Main  ): Collection, data= [ 0x00 ] 0
                            Physical
            Item(Global): Usage Page, data= [ 0x09 ] 9
                            Buttons
            Item(Local ): Usage Minimum, data= [ 0x01 ] 1
                            Button 1 (Primary)
            Item(Local ): Usage Maximum, data= [ 0x10 ] 16
                            (null)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0x01 ] 1
            Item(Global): Report Size, data= [ 0x01 ] 1
            Item(Global): Report Count, data= [ 0x10 ] 16
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Usage Page, data= [ 0x01 ] 1
                            Generic Desktop Controls
            Item(Local ): Usage, data= [ 0x30 ] 48
                            Direction-X
            Item(Local ): Usage, data= [ 0x31 ] 49
                            Direction-Y
            Item(Global): Logical Minimum, data= [ 0x01 0x80 ] 32769
            Item(Global): Logical Maximum, data= [ 0xff 0x7f ] 32767
            Item(Global): Report Size, data= [ 0x10 ] 16
            Item(Global): Report Count, data= [ 0x02 ] 2
            Item(Main  ): Input, data= [ 0x06 ] 6
                            Data Variable Relative No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Local ): Usage, data= [ 0x38 ] 56
                            Wheel
            Item(Global): Logical Minimum, data= [ 0x81 ] 129
            Item(Global): Logical Maximum, data= [ 0x7f ] 127
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x06 ] 6
                            Data Variable Relative No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Usage Page, data= [ 0x0c ] 12
                            Consumer
            Item(Local ): Usage, data= [ 0x38 0x02 ] 568
                            AC Pan
            Item(Global): Logical Minimum, data= [ 0x81 ] 129
            Item(Global): Logical Maximum, data= [ 0x7f ] 127
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x06 ] 6
                            Data Variable Relative No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
            Item(Global): Usage Page, data= [ 0x0c ] 12
                            Consumer
            Item(Local ): Usage, data= [ 0x00 ] 0
                            Unassigned
            Item(Global): Logical Minimum, data= [ 0x80 ] 128
            Item(Global): Logical Maximum, data= [ 0x7f ] 127
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Main  ): Feature, data= [ 0xc0 ] 192
                            Data Array Absolute No_Wrap Linear
                            Preferred_State Null_State Volatile Bitfield
            Item(Main  ): End Collection, data=none
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               1
Device Status:     0x0002
  (Bus Powered)
  Remote Wakeup Enabled

Offline

 

#4  2012-02-08 14:20:20

  NIC - Członek DUG

NIC
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-12-25
Serwis

Re: A4tech G9-500F w linuksie

To może nie będziemy kombinować:

Kod:

xmodmap -e "keycode 198 = f"

Z czego 198 to "keycode" do odczytania z "xev", a "f" to po prostu "f". Mapowanie klawiatury można podpatrzeć tu:
xmodmap -pk # albo -pke

xmodmap odpalać w odpalonej już sesji X (skrypty startowe użytkownika?)

PS. Jak do myszy to może XF86Copy lub XF86Paste (paste to chyba zazwyczaj przycisk rolki)?

Co do eleganckiego sposobu. Ja nie wiem czy te numerki z USB czasem się nie zmieniają jakoś. Być może będzie trzeba użyć finda i grepa. Ale chyba skrypty startowe to jedynie miejsce na taką operację.

Hmmm... Chcesz mieć klawiaturę w myszy, ale nie chcesz jej mieć... hmm... A gdyby zabrać jej prawa użytkownika?

PS 2. Cóż... Od dziś możesz mówić że masz bezprzewodową klawiaturę... Z aż jednym przyciskiem... (he he... ona ma jeszcze chyba wskaźnik NumLocka :))

Ostatnio edytowany przez NIC (2012-02-08 14:20:54)


Stronka-dom: [url]http://titek.victorygames.pl[/url]
Jabber: nic@jabster.pl
Hobby: kompilowanie Linuksa, Bluetooth
Dystrybucja: żadna, bliski krewny LFS, składak

Offline

 

#5  2012-02-08 15:32:10

  lewd - Użytkownik

lewd
Użytkownik
Zarejestrowany: 2012-02-07

Re: A4tech G9-500F w linuksie

Zaciąłem się wcześniej pisząc "ctrl + rwww"... chodziło oczywiście o kombinację "win + rwww..." (win + r w systemach MS przywołuje okno 'uruchom')

Mapowaniem niestety nic tu nie wskóram bo po wciśnięciu przycisku na myszy dzieje się coś takiego:

KeyPress event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312671, (522,-102), root:(1393,344),
    state 0x0, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312677, (522,-102), root:(1393,344),
    state 0x40, keycode 27 (keysym 0x72, r), same_screen YES,
    XLookupString gives 1 bytes: (72) "r"
    XmbLookupString gives 1 bytes: (72) "r"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312683, (522,-102), root:(1393,344),
    state 0x40, keycode 27 (keysym 0x72, r), same_screen YES,
    XLookupString gives 1 bytes: (72) "r"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312689, (522,-102), root:(1393,344),
    state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312754, (522,-102), root:(1393,344),
    state 0x0, keycode 25 (keysym 0x77, w), same_screen YES,
    XLookupString gives 1 bytes: (77) "w"
    XmbLookupString gives 1 bytes: (77) "w"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312763, (522,-102), root:(1393,344),
    state 0x0, keycode 25 (keysym 0x77, w), same_screen YES,
    XLookupString gives 1 bytes: (77) "w"
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312772, (522,-102), root:(1393,344),
    state 0x0, keycode 25 (keysym 0x77, w), same_screen YES,
    XLookupString gives 1 bytes: (77) "w"
    XmbLookupString gives 1 bytes: (77) "w"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312780, (522,-102), root:(1393,344),
    state 0x0, keycode 25 (keysym 0x77, w), same_screen YES,
    XLookupString gives 1 bytes: (77) "w"
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312790, (522,-102), root:(1393,344),
    state 0x0, keycode 25 (keysym 0x77, w), same_screen YES,
    XLookupString gives 1 bytes: (77) "w"
    XmbLookupString gives 1 bytes: (77) "w"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312798, (522,-102), root:(1393,344),
    state 0x0, keycode 25 (keysym 0x77, w), same_screen YES,
    XLookupString gives 1 bytes: (77) "w"
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312807, (522,-102), root:(1393,344),
    state 0x0, keycode 60 (keysym 0x2e, period), same_screen YES,
    XLookupString gives 1 bytes: (2e) "."
    XmbLookupString gives 1 bytes: (2e) "."
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312816, (522,-102), root:(1393,344),
    state 0x0, keycode 60 (keysym 0x2e, period), same_screen YES,
    XLookupString gives 1 bytes: (2e) "."
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312826, (522,-102), root:(1393,344),
    state 0x0, keycode 25 (keysym 0x77, w), same_screen YES,
    XLookupString gives 1 bytes: (77) "w"
    XmbLookupString gives 1 bytes: (77) "w"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312835, (522,-102), root:(1393,344),
    state 0x0, keycode 25 (keysym 0x77, w), same_screen YES,
    XLookupString gives 1 bytes: (77) "w"
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312843, (522,-102), root:(1393,344),
    state 0x0, keycode 31 (keysym 0x69, i), same_screen YES,
    XLookupString gives 1 bytes: (69) "i"
    XmbLookupString gives 1 bytes: (69) "i"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312853, (522,-102), root:(1393,344),
    state 0x0, keycode 31 (keysym 0x69, i), same_screen YES,
    XLookupString gives 1 bytes: (69) "i"
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312861, (522,-102), root:(1393,344),
    state 0x0, keycode 57 (keysym 0x6e, n), same_screen YES,
    XLookupString gives 1 bytes: (6e) "n"
    XmbLookupString gives 1 bytes: (6e) "n"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4600001,
    root 0x15a, subw 0x0, time 57312870, (522,-102), root:(1393,344),
    state 0x0, keycode 57 (keysym 0x6e, n), same_screen YES,
    XLookupString gives 1 bytes: (6e) "n"
    XFilterEvent returns: False
...
...
...
i tak do końca sekwencji potrzebnej żeby powstało: (win + r)www.win2.cn/g9[/quote]
Czyli dla przycisku w  myszy nie ma osobnego keycode, tylko leci standardowa wiązanka z puli klawiatury. Pozostaje mi wyłączyć to na stałe bo niepotrzebne zamieszanie powoduje jako kontroler, który w dodatku jest kiepsko skalibrowany. Jeśli kiedyś ktoś z was zauważy, że pojazd, postać lub kursor w waszej grze czy programie porusza się bez waszego udziału - to być może ukryta klawiaturę masz w receiverze : )


Może kiedyś w wolnej chwili skrobnę mejla do producenta z zapytaniem co z tym fantem zrobić ale nie liczę na odpowiedz inna niż: jest to produkt dla systemów z rodziny Windows.

Dzięki za pomoc NIC.

Offline

 

#6  2012-02-08 16:41:34

  NIC - Członek DUG

NIC
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-12-25
Serwis

Re: A4tech G9-500F w linuksie

Tak swoją drogą... Jeśli masz otwarty edytor tekstowy i naciśniesz ten przycisk to powinien ten tekst z przycisku pojawić się w edytorze :)

Czyli w sterowniku o A4Tech powinniśmy przechwycić tą całą sekwencję i zamienić na jakiś jeden konkretny keycode, tak? Mógłbym się w to zabawić, ale czy tak byłoby dobrze i Linus by się na to skusił? Bo to już takie jakby ingerowanie w sprzęt...

Nie masz czasem VirtualBoksa z Windowsem? Można by podpatrzeć komunikację. Być może owy sterownik do jednego przycisku wysyła coś do tej-klawiatury i ta zaczyna normalnie działać (może ustawia LED NumLocka lub LED Kanę)


Stronka-dom: [url]http://titek.victorygames.pl[/url]
Jabber: nic@jabster.pl
Hobby: kompilowanie Linuksa, Bluetooth
Dystrybucja: żadna, bliski krewny LFS, składak

Offline

 

#7  2012-02-09 22:34:18

  lewd - Użytkownik

lewd
Użytkownik
Zarejestrowany: 2012-02-07

Re: A4tech G9-500F w linuksie

Tak swoją drogą... Jeśli masz otwarty edytor tekstowy i naciśniesz ten przycisk to powinien ten tekst z przycisku pojawić się w edytorze :)[/quote]
W edytorze, konsoli, polach edycji na www itp. Niestety ma to swoje złe strony, np. Blender niemal do każdego pojedyńczego klawisza ma przypisaną jakąś akcję i takie niepożądane 'makro' jest w stanie zmienić wiele rzeczy w projekcie nad, którym się pracuje.

Mam wirtualkę z Windowsem. Jeśli powiesz mi jak, to zbiorę odpowiednie dane. Ewentualnie sesja teamviewer/vnc też wchodzi w grę.

Offline

 

#8  2012-02-10 12:00:25

  NIC - Członek DUG

NIC
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-12-25
Serwis

Re: A4tech G9-500F w linuksie

He he... Czyli naciskasz przez przypadek przycisk na myszce i z ręcznie robionej kuli robi Ci się kręgosłup :)

Ale do rzeczy: cała sztuczka polega na tym by mieć:

Kod:

ls /dev/usbmon*

Jeśli tego nie ma to potrzeba moduły kernela jeśli się nie mylę (będziemy myśleć później, mam nadzieję że to jest)

Numerki oznaczają BUS number, który można zobaczyć dzięki "lsusb". Ważne by odpiąć (tzn. byle danych nie słały) zbędne urządzenia i samej myszy nie ruszać (trudne zadanie), by logi nie były zaśmiecone zbędnymi śmieciami.

Kolejny problem to taki że logi należałoby zebrać Wiresharkiem, który przez bibliotekę "libpcap", uruchomiony z roota (idziemy na łatwiznę) powinien wylistować te interfejsy USBmon na liście. Stąd wysnijować i podesłać plik *.pcap i już jakoś sobie to zdeszyfruję :)

Procedura:
1. Odłączyć odbiornik myszy z USB.
2. Włączyć Wiresharka do zbierania po USB. (CTRL+E ?)
3. Wsadzić odbiornik do USB.
4. Kliknąć: LEWY, LEWY, LEWY, PRAWY, PRAWY, PRAWY, PRZYCISK_TESTOWANY, PRZYCISK_TESTOWANY, , PRAWY, PRAWY, PRAWY, LEWY, LEWY, LEWY.
5. Włączyć maszynę wirtualną, która ma już ten sterownik zainstalowany.
6. Ponowić operację jak w punkcie 4.
7. Wyłączyć logowanie Wiresharka (CTRL+E ?)

Najważniejsze jest by... Nie ruszać tą myszą :) Bo zaspami to logi.
Nikt nie broni mieć drugiej myszy; by nie na tym samym USB bus.

Troszkę pracy przy tym jest, ale powinno ładnie przechwycić komunikację pod Windows. To pozwoli na dopisanie sterownika do jądra (w końcu to jeden przycisk, dużej filozofii tu być nie może).

PS. Wireshark oczywiście na Linuksie odpalany.
Pomocne linki:
http://www.wireshark.org/download.html
https://www.virtualbox.org/wiki/Downloads
http://download.virtualbox.org/virtualbox/4.1.8/Oracle_VM_VirtualBox_Extension_Pack-4.1.8-75467.vbox-extpack (by mieć USB z Linuksa w maszynie; w szczególności trzeba wybrać ową mysz by się zbindowała w maszynie)

Ostatnio edytowany przez NIC (2012-02-10 12:18:00)


Stronka-dom: [url]http://titek.victorygames.pl[/url]
Jabber: nic@jabster.pl
Hobby: kompilowanie Linuksa, Bluetooth
Dystrybucja: żadna, bliski krewny LFS, składak

Offline

 

#9  2012-02-10 13:16:37

  lewd - Użytkownik

lewd
Użytkownik
Zarejestrowany: 2012-02-07

Re: A4tech G9-500F w linuksie

Niestety sterownik w wirtualce nie wykrywa urządzenia. Zainstalowałem extension pack do VirtualBoxa i uruchamiłem maszynę z włączonym kontrolerem USB 2.0 ale niestety bez zmian.

Offline

 

#10  2012-02-10 15:00:51

  NIC - Członek DUG

NIC
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-12-25
Serwis

Re: A4tech G9-500F w linuksie

A pod inną nazwą nie ma jej czasem na liście wykrytych? Zobacz na obrazki tu:
http://www.amigib.cal24.pl/2010/03/19/jak-uruchomic-usb-w-virtualbox/ (na tym pierwszym widać ładnie że widzi są [choć na obrazku USB akurat jest zdeaktywowane]) [checkbox obok wpisu musi być zaznaczony]

Grupa "vboxusers" jest prawdopodobnie wymagana, więc sprawdź czy w niej jesteś (jeśli nie to po dodaniu zrób restart; z praktyki wiem, że trzeba też wszystkie sesje terminala zrestartować by virtualbox uruchomił się z tą grupą - czyli reset jest najefektywniejszą opcją)

A jak z innymi urządzeniami USB. Są?


Stronka-dom: [url]http://titek.victorygames.pl[/url]
Jabber: nic@jabster.pl
Hobby: kompilowanie Linuksa, Bluetooth
Dystrybucja: żadna, bliski krewny LFS, składak

Offline

 

#11  2012-02-10 16:21:04

  lewd - Użytkownik

lewd
Użytkownik
Zarejestrowany: 2012-02-07

Re: A4tech G9-500F w linuksie

Dodanie do grupy pomogło.

Plik z tym co udało się przechwycić: [url=http://ompldr.org/vY3FvNw]http://ompldr.org/vY3FvNw[/url]

Offline

 

#12  2012-02-10 21:26:17

  NIC - Członek DUG

NIC
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-12-25
Serwis

Re: A4tech G9-500F w linuksie

Hmm... Pasjonująca lektura.

Zidentyfikowałem dodatkowy strumień z myszy (fizycznej), który podawany jest w strumieniu pseudoklawiatury, ale jest to dodatkowy strumień. Być może właśnie od jest rozpoznawany jako joystick w grze. Mógłbyś sprawdzić czy w grze jesteś w stanie przypisać: LEWY, PRAWY i ten nasz TESTOWY_PRZYCISK? Bo z tego strumienia wynika że w tym strumieniu zawsze obecne są właśnie te trzy przyciski, a zatem mamy Twój przycisk, 50% prac wykonane.

Do wyjaśnienia pozostaje kwestia jak wyłączyć ten ciąg ze zwykłej klawiatury. Windows to zrobił. Niestety w logach nie ma przy tym większych różnic... Poza:
1) Windows wysyła trzy identyczne SET REPORTy po sobie
2) Windows przy inicjacji urządzenia wysyła całą chmarę GET DESCRIPTORów, które są "Unknown", stąd są podejrzane, ale są to GETy więc raczej nie to zmienia stan urządzenia...
3) Windows co każdy przycisk myszy spamuje biedną myszkę GET DESCRIPTOrem, który zawsze jest taki sam (w punkcie drugim są to różne wartości)

Obstawiam więc a).


Możesz wypróbować to:

Kod:

gcc hid-example.c  -o h && ./h /dev/hidraw3

Kod:

/*
 * Hidraw Userspace Example
 *
 * Copyright (c) 2010 Alan Ott <alan@signal11.us>
 * Copyright (c) 2010 Signal 11 Software
 *
 * The code may be used by anyone for any purpose,
 * and can serve as a starting point for developing
 * applications using hidraw.
 */

/* Linux */
#include <linux/types.h>
#include <linux/input.h>
#include <linux/hidraw.h>

/*
 * Ugly hack to work around failing compilation on systems that don't
 * yet populate new version of hidraw.h to userspace.
 *
 * If you need this, please have your distro update the kernel headers.
 */
#ifndef HIDIOCSFEATURE
#define HIDIOCSFEATURE(len)    _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x06, len)
#define HIDIOCGFEATURE(len)    _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x07, len)
#endif

/* Unix */
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

/* C */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>

const char *bus_str(int bus);

int main(int argc, char **argv)
{
    int fd;
    int i, res, desc_size = 0;
    char buf[256];
    struct hidraw_report_descriptor rpt_desc;
    struct hidraw_devinfo info;

    /* Open the Device with non-blocking reads. In real life,
       don't use a hard coded path; use libudev instead. */
    // "/dev/hidraw0"
    fd = open(argv[1], O_RDWR|O_NONBLOCK);

    if (fd < 0) {
        perror("Unable to open device");
        return 1;
    }

    memset(&rpt_desc, 0x0, sizeof(rpt_desc));
    memset(&info, 0x0, sizeof(info));
    memset(buf, 0x0, sizeof(buf));

    /* Get Report Descriptor Size */
    res = ioctl(fd, HIDIOCGRDESCSIZE, &desc_size);
    if (res < 0)
        perror("HIDIOCGRDESCSIZE");
    else
        printf("Report Descriptor Size: %d\n", desc_size);

    /* Get Report Descriptor */
    rpt_desc.size = desc_size;
    res = ioctl(fd, HIDIOCGRDESC, &rpt_desc);
    if (res < 0) {
        perror("HIDIOCGRDESC");
    } else {
        printf("Report Descriptor:\n");
        for (i = 0; i < rpt_desc.size; i++)
            printf("%hhx ", rpt_desc.value[i]);
        puts("\n");
    }

    /* Get Raw Name */
    res = ioctl(fd, HIDIOCGRAWNAME(256), buf);
    if (res < 0)
        perror("HIDIOCGRAWNAME");
    else
        printf("Raw Name: %s\n", buf);

    /* Get Physical Location */
    res = ioctl(fd, HIDIOCGRAWPHYS(256), buf);
    if (res < 0)
        perror("HIDIOCGRAWPHYS");
    else
        printf("Raw Phys: %s\n", buf);

    /* Get Raw Info */
    res = ioctl(fd, HIDIOCGRAWINFO, &info);
    if (res < 0) {
        perror("HIDIOCGRAWINFO");
    } else {
        printf("Raw Info:\n");
        printf("\tbustype: %d (%s)\n",
            info.bustype, bus_str(info.bustype));
        printf("\tvendor: 0x%04hx\n", info.vendor);
        printf("\tproduct: 0x%04hx\n", info.product);
    }


    /* Send a Report to the Device */
    buf[0] = 0x01; /* Report Number */
    buf[1] = 0x00;
    res = write(fd, buf, 2);
    if (res < 0) {
        printf("Error: %d\n", errno);
        perror("write");
    } else {
        printf("write() wrote %d bytes\n", res);
    }

    /* Get a report from the device */
    res = read(fd, buf, 16);
    if (res < 0) {
        perror("read");
    } else {
        printf("read() read %d bytes:\n\t", res);
        for (i = 0; i < res; i++)
            printf("%hhx ", buf[i]);
        puts("\n");
    }

    buf[0] = 0x01; /* Report Number */
    buf[1] = 0x00;
    res = write(fd, buf, 2);
    if (res < 0) {
        printf("Error: %d\n", errno);
        perror("write");
    } else {
        printf("write() wrote %d bytes\n", res);
    }

    /* Get a report from the device */
    res = read(fd, buf, 16);
    if (res < 0) {
        perror("read");
    } else {
        printf("read() read %d bytes:\n\t", res);
        for (i = 0; i < res; i++)
            printf("%hhx ", buf[i]);
        puts("\n");
    }

    buf[0] = 0x01; /* Report Number */
    buf[1] = 0x00;
    res = write(fd, buf, 2);
    if (res < 0) {
        printf("Error: %d\n", errno);
        perror("write");
    } else {
        printf("write() wrote %d bytes\n", res);
    }

    /* Get a report from the device */
    res = read(fd, buf, 16);
    if (res < 0) {
        perror("read");
    } else {
        printf("read() read %d bytes:\n\t", res);
        for (i = 0; i < res; i++)
            printf("%hhx ", buf[i]);
        puts("\n");
    }



    close(fd);
    return 0;
}

const char *
bus_str(int bus)
{
    switch (bus) {
    case BUS_USB:
        return "USB";
        break;
    case BUS_HIL:
        return "HIL";
        break;
    case BUS_BLUETOOTH:
        return "Bluetooth";
        break;
    case BUS_VIRTUAL:
        return "Virtual";
        break;
    default:
        return "Other";
        break;
    }
}

Gdzie "hidraw3" zastąp swoimi. Tym razem grzecznie przeleć przez wszystkie  "ls /dev/hidraw*" (zasady tworzenia tych urządzeń są już niejasne dla mnie; chyba dynamicznie)
Tym razem tylko pod Linuksem bez zbierania logów:
0. wireshark
1. używasz xev by zobaczyć czy nasz ulubiony combos leci. Ma lecieć.
2. hidraw (ten programik)
3. i sprawdzasz czy teraz też leci. Dobrze będzie jak nie poleci. Ale osobiście widzę że to nie działa (co prawda zwraca success, ale sam wireshark nie rozpoznaje tej opcji, więc istnieje cień podejrzenia że nie zadziała; ale ramki idą poprawne w każdym bądź razie)
4. zrzuć log

Dzięki za ten pierwszy log. Nieomalże perfekcyjny :) Drugi też tak zrób :) (nie ruszać myszy :))

PS. Z tego co widzę... To Linux lepiej obsługuje to urządzenie niż Windows. Windows tam czarną magię wali, a na Linuksie jest czysto i schludnie.


Stronka-dom: [url]http://titek.victorygames.pl[/url]
Jabber: nic@jabster.pl
Hobby: kompilowanie Linuksa, Bluetooth
Dystrybucja: żadna, bliski krewny LFS, składak

Offline

 

#13  2012-02-17 10:34:54

  lewd - Użytkownik

lewd
Użytkownik
Zarejestrowany: 2012-02-07

Re: A4tech G9-500F w linuksie

Po krótkiej przerwie jestem z powrotem.

Log: http://www.sendspace.com/file/or0ppe

i jeszcze to co wypluwał skompilowany kod:

Kod:

# ./h /dev/hidraw2
Report Descriptor Size: 87
Report Descriptor:
5 1 9 2 a1 1 9 1 a1 0 5 9 19 1 29 10 15 0 25 1 75 1 95 10 81 2 5 1 9 30 9 31 16 1 80 26 ff 7f 75 10 95 2 81 6 9 38 15 81 25 7f 75 8 95 1 81 6 5 c a 38 2 15 81 25 7f 75 8 95 1 81 6 c0 5 c 9 0 15 80 25 7f 75 8 95 8 b1 c0 c0 

Raw Name: A4TECH USB Device
Raw Phys: usb-0000:00:1d.0-1.2/input1
Raw Info:
        bustype: 3 (USB)
        vendor: 0x09da
        product: 0x054f
write() wrote 2 bytes
read: Resource temporarily unavailable
write() wrote 2 bytes
read: Resource temporarily unavailable
write() wrote 2 bytes
read: Resource temporarily unavailable

# ./h /dev/hidraw3
Report Descriptor Size: 132
Report Descriptor:
5 1 9 6 a1 1 85 1 5 7 19 e0 29 e7 15 0 25 1 75 1 95 8 81 2 95 5 75 1 5 8 19 1 29 5 91 2 95 1 75 3 91 1 95 a 75 8 15 0 26 a4 0 5 7 19 0 2a a4 0 81 0 c0 5 1 9 80 a1 1 85 2 19 0 29 b7 15 0 26 b7 0 95 1 75 8 81 0 c0 5 c 9 1 a1 1 85 3 19 0 2a 3c 2 15 0 26 3c 2 75 10 95 1 81 0 c0 6 a0 ff 9 a5 a1 1 85 4 9 a6 15 80 25 7f 75 8 95 8 81 2 c0 

Raw Name: A4TECH USB Device
Raw Phys: usb-0000:00:1d.0-1.2/input0
Raw Info:
        bustype: 3 (USB)
        vendor: 0x09da
        product: 0x054f
write() wrote 2 bytes
read: Resource temporarily unavailable
write() wrote 2 bytes
read: Resource temporarily unavailable
write() wrote 2 bytes
read: Resource temporarily unavailable

scenariusz był taki:
wireshark
xev
mouse button X (sypało tym co zawsze)
hidraw2
mouse button X (sypało tym co zawsze)
hidraw3
mouse button X (sypało tym co zawsze)
zrzut loga

(odpuściłem hidraw0 i 1, bo to fizyczna klawiatura z przyciskami multimedialnym)

Offline

 

#14  2012-02-17 11:40:53

  NIC - Członek DUG

NIC
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-12-25
Serwis

Re: A4tech G9-500F w linuksie

Super.

Z tym że coś tu się nie zgadza:
1. Wireshark # OK
2. 10s później  naciskasz przyciskX i leci nasza combo-sekwencja # OK
3. 24 sekundy później jest użyty programik na "hidraw2" # OK
4. NIC # źle!
5. 2 sekundy później  jest użyty programik na "hidraw3" # OK
6. 10 sekund później  naciskasz przyciskX i leci nasza combo-sekwencja # OK/chyba...

Ad 4. Ale Ty pisałeś że sypało... Ale ja nic nie mam...
Może 2 sekundy są niewystarczające by ta mysz zdążyła ruszyć lub jest błąd w Wiresharku (a raczej w bibliotece do zbierania logów "libpcap")
Możesz ponowić operację ale tym razem po każdym hidrawie odczekać 10 sekund po czym kliknąć LEWY, PRZYCISK_X, PRAWY - ułatwi stwierdzenie co jest grane jeśli jakiś logów mi zabraknie znów.

A tak w ogóle - to dobry znak że logi znikają, bo taki jest cel, ale zniknęło za dużo, a ponoć zadziałało (a ma nie być tego combo tylko)

PS 1. Dobrze że opuszczasz zbędne hidrawy :)
PS 2. To co wypluwa ten programik jest mało ważne generalnie, grunt że chyba działa, jednakże te linki zaczynające się od "Raw " pozwalają stwierdzić czy właściwy hidraw atakujemy :)

A teraz bardzo ważne pytanie: jako użytkownik myszy z czwartym przyciskiem... co byś chciał by on robił? Może ustawić go jako "F13" (na klawiaturze takiego nie ma więc można ująć że jest to wolny przycisk do przypisania), a może jakaś konkretna funkcja (Jakieś "Paste"?).


Plan wojny o przycisk:
1. Wyłączyć combo (tak czy owak trzeba to zrobić...)
2. Rozszerzyć sterownik kernela A4Tech o Twoją mysz i przeforwardować owy przycisk jak normalny przycisk klawiatury (ewentualnie myszy). 
A może to zły pomysł i wystarczy załadować moduł joysticka do kernela:

In the kernel configuration stage, you need to turn on USB Human Interface Device (HID) support in USB support and Joystick support in Input core support.[/quote]
I powinny być urządzenia joysticka:
ls /dev/input/js*

# wskazówki z dokumentacji Linuksa które może pomogę naprowadzić Cię gdzieś
modprobe joydev
jstest /dev/js0 # inna ścieżka?
jstest /dev/input/js0
# http://en.gentoo-wiki.com/wiki/Joystick
# http://packages.debian.org/sid/jstest-gtk


Stronka-dom: [url]http://titek.victorygames.pl[/url]
Jabber: nic@jabster.pl
Hobby: kompilowanie Linuksa, Bluetooth
Dystrybucja: żadna, bliski krewny LFS, składak

Offline

 

#15  2012-02-17 12:27:57

  lewd - Użytkownik

lewd
Użytkownik
Zarejestrowany: 2012-02-07

Re: A4tech G9-500F w linuksie

Oczywiście, że jest joy w systemie i to nie byle jaki: 57 przycisków i 37 osi : ) Jednak żaden przycisk ani oś nie reagują na wciśnięcie klawisza myszy a do tego niemal wszystkie osie zgłaszają maksymalny wychył w jedna stronę (-32767), co z pewnością może powodować problemy w grach.

Zanim przygotuje kolejnego loga wyjaśnij mi tylko czy mam w jakiś sposób 'czyścić' efekt tego kodu do hidraw (przeładować jakiś moduł czy ewentualnie restart)?

Offline

 

#16  2012-02-17 12:35:13

  NIC - Członek DUG

NIC
Członek DUG
Skąd: Wrocław
Zarejestrowany: 2006-12-25
Serwis

Re: A4tech G9-500F w linuksie

Nie, myślę że nie. Dopóki przy pierwszym naciśnięciu leci to combo. (ma lecieć, jak nie to wtedy już faktycznie jakiś restart [odpiąć/wpiąć myszojoyturę :)])
To coś nie tak z tym joystrickiem... A że tak spytam, owy przechył w bok możesz przypisać w systemie jak normalny skrót klawiaturowy? (bida w domu u mnie, nic nie ma w sobie joysticka, to i nie wiem :))

PS. Jak w dmesgu rozpoznaje ten joystick?


Stronka-dom: [url]http://titek.victorygames.pl[/url]
Jabber: nic@jabster.pl
Hobby: kompilowanie Linuksa, Bluetooth
Dystrybucja: żadna, bliski krewny LFS, składak

Offline

 

#17  2012-02-17 13:17:02

  lewd - Użytkownik

lewd
Użytkownik
Zarejestrowany: 2012-02-07

Re: A4tech G9-500F w linuksie

Czy da się ten przechył jakoś przypisać nie wiem, ale skoro nie da się zmienić (przynajmniej na obecna chwilę) stanu tego przechyłu to byłby z tego wiecznie wciśnięty przycisk.
Co do tego jak bym chciał ten ten przycisk wykorzystać, jak najbardziej może być opcja F13 : )


Log: http://www.sendspace.com/file/e6dr2c

scenariusz taki sam jak poprzednio ze zmiana XMB na  LMB XMB RMB

dmesg zgłasza tylko to:

Kod:

[53843.211243] usb 2-1.2: new full-speed USB device number 7 using ehci_hcd
[53843.305101] usb 2-1.2: New USB device found, idVendor=09da, idProduct=054f
[53843.305107] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[53843.305112] usb 2-1.2: Product: USB Device
[53843.305115] usb 2-1.2: Manufacturer: A4TECH
[53843.307242] input: A4TECH USB Device as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/input/input13
[53843.308062] generic-usb 0003:09DA:054F.0009: input,hiddev0,hidraw2: USB HID v1.11 Keyboard [A4TECH USB Device] on usb-0000:00:1d.0-1.2/input0
[53843.309250] input: A4TECH USB Device as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.1/input/input14
[53843.309812] generic-usb 0003:09DA:054F.000A: input,hidraw3: USB HID v1.11 Mouse [A4TECH USB Device] on usb-0000:00:1d.0-1.2/input1

Jeśli Ci to pomoże to zawsze jeszcze można pohardkorzyć z usbip ; )


PS. dmesg nie zgłaszał w jawny sposób joya ale:

Kod:

# ls -l /dev/input/by-id/ | grep js*
lrwxrwxrwx 1 root root 6 lut 17 13:05 usb-A4TECH_USB_Device-kbd -> ../js0
# ls -l /dev/input/by-path/ | grep js*
lrwxrwxrwx 1 root root 6 lut 17 13:05 pci-0000:00:1d.0-usb-0:1.2:1.0-kbd -> ../js0

Ostatnio edytowany przez lewd (2012-02-17 13:20:39)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.011 seconds, 9 queries executed ]

Informacje debugowania

Time (s) Query
0.00010 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00097 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='52.14.166.224' WHERE u.id=1
0.00090 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '52.14.166.224', 1732750645)
0.00046 SELECT * FROM punbb_online WHERE logged<1732750345
0.00058 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=20611 AND t.moved_to IS NULL
0.00005 SELECT search_for, replace_with FROM punbb_censoring
0.00443 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=20611 ORDER BY p.id LIMIT 0,25
0.00093 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=20611
Total query time: 0.00846 s