[Решено]Помогите написать скрипт для решения проблемы, описанной в теме (http://unixforum.org/index.php?showtopic=109437)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
BrONtOSAUR
Сообщения: 421
ОС: Debian Sid

[Решено]Помогите написать скрипт для решения проблемы, описанной в теме

Сообщение BrONtOSAUR »

В общем идея такова. Имеются 3 файла устройств:

Код: Выделить всё

/dev/input/js0
/dev/input/js1
/dev/input/js2

js0 соответсвует мыши A4Tech, два остальных распределяются между геймпадами Logitech Rumblepad 2 и Logitech Chillstream, причём при каждом запуске системы они распределяются рандомно.
Нужен скрипт, который удаляет /dev/input/js0, поскольку мышь в виде джойстика мешает. Затем распределяет геймпады по схеме:

Код: Выделить всё

/dev/input/js0 - Logitech Rumblepad 2
/dev/input/js1 - Logitech Chillstream

Надеюсь задачу изъяснил доступно. Заранее спасибо за помощь.
System: Debian GNU/Linux Sid + kernel 2.6.35 + gcc 4.4.5 + X.org 2:1.7.7-2 + KDE 4.4.5
Config: Asus P5B + Intel Core 2 Duo E6750 2.66 Mhz + GIGABYTE GeForce 9600GT 1GB (260.19.29 drv.) + 4GB RAM + Creative Audigy SE
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: [Решено]Помогите написать скрипт для решения проблемы, описанной в теме

Сообщение DaemonTux »

Может есть способ через правила udev привязать?
Vladivostok Linux User Group
Спасибо сказали:
Аватара пользователя
gramozeka
Сообщения: 204
ОС: Slackware-14

Re: [Решено]Помогите написать скрипт для решения проблемы, описанной в теме

Сообщение gramozeka »

DaemonTux писал(а): ↑
04.08.2010 06:43
Может есть способ через правила udev привязать?

один udev не потянет , udev+hal и DE какой(?) , т.к. в последних кедах джойстики можно конфигурировать средствами самих кед в очень широких пределах . Про гнома не знаю , т.к. опыта с ним очень мало ...
Тут вот идейку подкинули , что мышь можно вырубить через питание питание хаба , но это уже полноценный драйвер получится( хотя и извращенный).
... ну я же просил четыреста капель , а сдесь четыреста две ...
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: [Решено]Помогите написать скрипт для решения проблемы, описанной в теме

Сообщение DaemonTux »

Так вроде hal тут вообще не как не вписывается. Настраивать то не требуется. А требуется жесткая привязка в /dev.

Чтобы получить ифу об устройсвах выполните.

Код: Выделить всё

udevadm info --query=all --name=/dev/input/js0

Ну и в правилах udev использовать эти параметры.
Vladivostok Linux User Group
Спасибо сказали:
Аватара пользователя
BrONtOSAUR
Сообщения: 421
ОС: Debian Sid

Re: [Решено]Помогите написать скрипт для решения проблемы, описанной в теме

Сообщение BrONtOSAUR »

Код: Выделить всё

$ sudo udevadm info --query=all --name=/dev/input/js0
P: /devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1.1/2-1.1.3/2-1.1.3:1.1/input/input3/js0
N: input/js0
S: char/13:0
S: input/by-id/usb-A4Tech_USB_Full_Speed-kbd
S: input/by-path/pci-0000:00:1d.7-usb-0:1.1.3:1.1-kbd
E: UDEV_LOG=3
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1.1/2-1.1.3/2-1.1.3:1.1/input/input3/js0
E: SUBSYSTEM=input
E: DEVNAME=input/js0
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_KEYBOARD=1
E: ID_VENDOR=A4Tech
E: ID_VENDOR_ENC=A4Tech
E: ID_VENDOR_ID=09da
E: ID_MODEL=USB_Full_Speed
E: ID_MODEL_ENC=USB\x20Full\x20Speed
E: ID_MODEL_ID=8090
E: ID_REVISION=0606
E: ID_SERIAL=A4Tech_USB_Full_Speed
E: ID_TYPE=hid
E: ID_BUS=usb
E: ID_USB_INTERFACES=:030102:030101:
E: ID_USB_INTERFACE_NUM=01
E: ID_USB_DRIVER=usbhid
E: ID_PATH=pci-0000:00:1d.7-usb-0:1.1.3:1.1
E: MAJOR=13
E: MINOR=0
E: DEVLINKS=/dev/char/13:0 /dev/input/by-id/usb-A4Tech_USB_Full_Speed-kbd /dev/input/by-path/pci-0000:00:1d.7-usb-0:1.1.3:1.1-kbd

$ sudo udevadm info --query=all --name=/dev/input/js1
P: /devices/pci0000:00/0000:00:1d.1/usb6/6-2/6-2:1.0/input/input8/js1
N: input/js1
S: char/13:1
S: input/by-id/usb-Logitech_Logitech_RumblePad_2_USB-joystick
S: input/by-path/pci-0000:00:1d.1-usb-0:2:1.0-joystick
E: UDEV_LOG=3
E: DEVPATH=/devices/pci0000:00/0000:00:1d.1/usb6/6-2/6-2:1.0/input/input8/js1
E: SUBSYSTEM=input
E: DEVNAME=input/js1
E: ID_INPUT=1
E: ID_INPUT_JOYSTICK=1
E: ID_VENDOR=Logitech
E: ID_VENDOR_ENC=Logitech
E: ID_VENDOR_ID=046d
E: ID_MODEL=Logitech_RumblePad_2_USB
E: ID_MODEL_ENC=Logitech\x20RumblePad\x202\x20USB
E: ID_MODEL_ID=c218
E: ID_REVISION=0100
E: ID_SERIAL=Logitech_Logitech_RumblePad_2_USB
E: ID_TYPE=hid
E: ID_BUS=usb
E: ID_USB_INTERFACES=:030000:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=usbhid
E: ID_PATH=pci-0000:00:1d.1-usb-0:2:1.0
E: MAJOR=13
E: MINOR=1
E: DEVLINKS=/dev/char/13:1 /dev/input/by-id/usb-Logitech_Logitech_RumblePad_2_USB-joystick /dev/input/by-path/pci-0000:00:1d.1-usb-0:2:1.0-joystick
E: TAGS=:udev-acl:

$ sudo udevadm info --query=all --name=/dev/input/js2
P: /devices/pci0000:00/0000:00:1d.1/usb6/6-1/6-1:1.0/input/input10/js2
N: input/js2
S: char/13:2
S: input/by-id/usb-Logitech_XUSB_Gamepad_8A60B55D-joystick
S: input/by-path/pci-0000:00:1d.1-usb-0:1:1.0-joystick
E: UDEV_LOG=3
E: DEVPATH=/devices/pci0000:00/0000:00:1d.1/usb6/6-1/6-1:1.0/input/input10/js2
E: SUBSYSTEM=input
E: DEVNAME=input/js2
E: ID_INPUT=1
E: ID_INPUT_JOYSTICK=1
E: ID_VENDOR=Logitech
E: ID_VENDOR_ENC=Logitech
E: ID_VENDOR_ID=046d
E: ID_MODEL=XUSB_Gamepad
E: ID_MODEL_ENC=XUSB\x20Gamepad
E: ID_MODEL_ID=c242
E: ID_REVISION=1000
E: ID_SERIAL=Logitech_XUSB_Gamepad_8A60B55D
E: ID_SERIAL_SHORT=8A60B55D
E: ID_TYPE=generic
E: ID_BUS=usb
E: ID_USB_INTERFACES=:ff5d01:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=xpad
E: ID_PATH=pci-0000:00:1d.1-usb-0:1:1.0
E: MAJOR=13
E: MINOR=2
E: DEVLINKS=/dev/char/13:2 /dev/input/by-id/usb-Logitech_XUSB_Gamepad_8A60B55D-joystick /dev/input/by-path/pci-0000:00:1d.1-usb-0:1:1.0-joystick
E: TAGS=:udev-acl:

Вот по поводу udev-правил прошу поподробнее
System: Debian GNU/Linux Sid + kernel 2.6.35 + gcc 4.4.5 + X.org 2:1.7.7-2 + KDE 4.4.5
Config: Asus P5B + Intel Core 2 Duo E6750 2.66 Mhz + GIGABYTE GeForce 9600GT 1GB (260.19.29 drv.) + 4GB RAM + Creative Audigy SE
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [Решено]Помогите написать скрипт для решения проблемы, описанной в теме

Сообщение sash-kan »

BrONtOSAUR писал(а): ↑
05.08.2010 11:53
Вот по поводу udev-правил прошу поподробнее
http://reactivated.net/writing_udev_rules.html
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
BrONtOSAUR
Сообщения: 421
ОС: Debian Sid

Re: [Решено]Помогите написать скрипт для решения проблемы, описанной в теме

Сообщение BrONtOSAUR »

Проштудировал, накатал правило:

Код: Выделить всё

$ cat 05_joysticks.rules
SYSFS{idVendor}=="04da", SYSFS{idProduct}=="8090", OPTIONS+="ignore_device"

Однако, никакого результата не последовало.
System: Debian GNU/Linux Sid + kernel 2.6.35 + gcc 4.4.5 + X.org 2:1.7.7-2 + KDE 4.4.5
Config: Asus P5B + Intel Core 2 Duo E6750 2.66 Mhz + GIGABYTE GeForce 9600GT 1GB (260.19.29 drv.) + 4GB RAM + Creative Audigy SE
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: [Решено]Помогите написать скрипт для решения проблемы, описанной в теме

Сообщение DaemonTux »

BrONtOSAUR писал(а): ↑
06.08.2010 00:47
Проштудировал, накатал правило:

Код: Выделить всё

$ cat 05_joysticks.rules
SYSFS{idVendor}=="04da", SYSFS{idProduct}=="8090", OPTIONS+="ignore_device"

Однако, никакого результата не последовало.

И что по вашему должно делать это правило?
ИМХО должно быть нечто вроде:

Код: Выделить всё

SYSFS{idVendor}=="04da", SYSFS{idProduct}=="8090",  NAME="jsA4Tech"
Vladivostok Linux User Group
Спасибо сказали:
Аватара пользователя
BrONtOSAUR
Сообщения: 421
ОС: Debian Sid

Re: [Решено]Помогите написать скрипт для решения проблемы, описанной в теме

Сообщение BrONtOSAUR »

Сделал, не работает.

Код: Выделить всё

$ cat /etc/udev/rules.d/0125_joysticks.rules
KERNEL=="input/js0", ATTR{idProduct}=="8090", ATTR{idProduct}=="8090",          NAME="jsA4Tech"


Никак не пойму, устройство определяется, как клавиатура, судя по udevadm и в то же время пропихивается в джойстики.

А, кстати:

Код: Выделить всё

$ sudo udevadm info -a -p "/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1.1/2-1.1.3/2-1.1.3:1.1/input/input3/js0"

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1.1/2-1.1.3/2-1.1.3:1.1/input/input3/js0':
    KERNEL=="js0"
    SUBSYSTEM=="input"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1.1/2-1.1.3/2-1.1.3:1.1/input/input3':
    KERNELS=="input3"
    SUBSYSTEMS=="input"
    DRIVERS==""
    ATTRS{name}=="A4Tech USB Full Speed"
    ATTRS{phys}=="usb-0000:00:1d.7-1.1.3/input1"
    ATTRS{uniq}==""
    ATTRS{modalias}=="input:b0003v09DAp8090e0111-e0,1,2,3,4,11,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87
,88,89,8A,8B,8C,8E,8F,90,96,98,9B,9C,9E,9F,A1,A3,A4,A5,A6,A7,A8,A9,AB,AC,AD,AE,B1
,B2,B5,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,CE,CF,D0,D1,D2,D5,D8,D9,DB,E2,EA,EB,F0
,100,13A,13B,162,166,16A,16E,178,179,17A,17B,17C,17D,17F,180,181,182,185,18C,18D,
192,193,195,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA,1AB,1AC,1AD,1AE,1B0,1B1,1
B7,r6,a0,1,2,3,4,5,6,7,8,10,11,12,20,28,29,2A,2B,2C,2D,2E,2F,30,31,32,33,34,35,36
,37,38,39,3A,3B,3C,3D,3E,m4,l0,1,2,3,4,sfw"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1.1/2-1.1.3/2-1.1.3:1.1':
    KERNELS=="2-1.1.3:1.1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usbhid"
    ATTRS{bInterfaceNumber}=="01"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="01"
    ATTRS{bInterfaceClass}=="03"
    ATTRS{bInterfaceSubClass}=="01"
    ATTRS{bInterfaceProtocol}=="01"
    ATTRS{modalias}=="usb:v09DAp8090d0606dc00dsc00dp00ic03isc01ip01"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1.1/2-1.1.3':
    KERNELS=="2-1.1.3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 2"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="a0"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{urbnum}=="58995"
    ATTRS{idVendor}=="09da"
    ATTRS{idProduct}=="8090"
    ATTRS{bcdDevice}=="0606"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{speed}=="12"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="8"
    ATTRS{devpath}=="1.1.3"
    ATTRS{version}==" 1.10"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="A4Tech"
    ATTRS{product}=="USB Full Speed"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1.1':
    KERNELS=="2-1.1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{urbnum}=="51"
    ATTRS{idVendor}=="046d"
    ATTRS{idProduct}=="c223"
    ATTRS{bcdDevice}=="0020"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{speed}=="12"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="5"
    ATTRS{devpath}=="1.1"
    ATTRS{version}==" 1.10"
    ATTRS{maxchild}=="4"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{product}=="G15 Keyboard Hub"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1':
    KERNELS=="2-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{urbnum}=="40"
    ATTRS{idVendor}=="0409"
    ATTRS{idProduct}=="005a"
    ATTRS{bcdDevice}=="0100"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="2"
    ATTRS{devpath}=="1"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="4"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2':
    KERNELS=="usb2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="50"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0206"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="6"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 2.6.35 ehci_hcd"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{serial}=="0000:00:1d.7"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7':
    KERNELS=="0000:00:1d.7"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci_hcd"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x2836"
    ATTRS{subsystem_vendor}=="0x1043"
    ATTRS{subsystem_device}=="0x81ec"
    ATTRS{class}=="0x0c0320"
    ATTRS{irq}=="23"
    ATTRS{local_cpus}=="ff"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{modalias}=="pci:v00008086d00002836sv00001043sd000081ECbc0Csc03i20"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""
    ATTRS{companion}==""

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""
System: Debian GNU/Linux Sid + kernel 2.6.35 + gcc 4.4.5 + X.org 2:1.7.7-2 + KDE 4.4.5
Config: Asus P5B + Intel Core 2 Duo E6750 2.66 Mhz + GIGABYTE GeForce 9600GT 1GB (260.19.29 drv.) + 4GB RAM + Creative Audigy SE
Спасибо сказали:
Аватара пользователя
BrONtOSAUR
Сообщения: 421
ОС: Debian Sid

Re: [Решено]Помогите написать скрипт для решения проблемы, описанной в теме

Сообщение BrONtOSAUR »

Проблема решена. Накатал скрипт и сунул в /etc/rc.local:

Код: Выделить всё

#!/bin/sh
rumblepad2=`readlink /dev/input/by-id/usb-Logitech_Logitech_RumblePad_2_USB-joystick | sed 's/..\///'`
chillstream=`readlink /dev/input/by-id/usb-Logitech_XUSB_Gamepad_8A60B55D-joystick | sed 's/..\///'`

echo Rumblepad2 is $rumblepad2
echo Chillstream is $chillstream

rm /dev/input/js0

ln /dev/input/$rumblepad2 /dev/input/rumblepad2_tmp
ln /dev/input/$chillstream /dev/input/chillstream_tmp

rm /dev/input/$rumblepad2
rm /dev/input/$chillstream

ln /dev/input/rumblepad2_tmp /dev/input/js0
ln /dev/input/chillstream_tmp /dev/input/js1

rm /dev/input/rumblepad2_tmp
rm /dev/input/chillstream_tmp
System: Debian GNU/Linux Sid + kernel 2.6.35 + gcc 4.4.5 + X.org 2:1.7.7-2 + KDE 4.4.5
Config: Asus P5B + Intel Core 2 Duo E6750 2.66 Mhz + GIGABYTE GeForce 9600GT 1GB (260.19.29 drv.) + 4GB RAM + Creative Audigy SE
Спасибо сказали: