Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/03/2019, à 14:20

PowaBanga

Condition qui ne fonctionne pas [bash]

bonjour,

Je réédite entièrement mon topic, car j'ai pas mal avancé depuis hier. Donc por faire bref, je fais appel ici à un script xboxdrv que je vais appliquer sur ma mannette PS3 si elle est connectée.

Le script devrait donc se lancer si  la valeur $js0 est egale à 'PLAYSTATION3' dans ce cas çi, la condition n'est pas acceptée, je ne comprend pas pourquoi... hmm

#!/bin/bash
js0="$(cat /proc/bus/input/devices | sed -re '/PLAYSTATION\(R\)3 Controller\"|js|Microsoft X-Box 360 pad\"/!d' | sed -e 's/H: Handlers=//g' |sed -e 's/N: Name=//g'|sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' | sed -e 's/\"Microsoft X-Box/\n"Microsoft X-Box/g' | sed -e 's/\"PLAYSTATION\(R\)3 Controller/\n\"PLAYSTATION\(R\)3 Controller/g' | sed -e '/js0/!d' | sed -re 's/\"|event[0-9]*|js[0-9]*//g' | sed -e 's/(R)//g' |sed -e 's/Controller//g')"
echo "$js0"
	if [ "$js0" = "PLAYSTATION3" ];
	then
js0=$(cat /proc/bus/input/devices | sed -e '/js0/!d' | sed -e 's/H: Handlers=//g' |sed -e 's/ js0 //g')
echo $js0
screen -dmS js0 xboxdrv --evdev /dev/input/$js0 --config /home/powabanga/Téléchargements/playstation3.xboxdrv
	fi
echo fin

Et voici ce que me répond le terminal

'/home/powabanga/Documents/trucs/scripts/variableps3.sh' 
PLAYSTATION3    
fin

Quelqu'un saurait m'aiguiller un peu ? hmm

Dernière modification par PowaBanga (Le 11/03/2019, à 21:11)

Hors ligne

#2 Le 11/03/2019, à 21:14

PowaBanga

Re : Condition qui ne fonctionne pas [bash]

je mets juste un petit up pour actualiser le topic smile

Hors ligne

#3 Le 11/03/2019, à 21:35

pingouinux

Re : Condition qui ne fonctionne pas [bash]

Bonsoir,
Tu peux déjà différencier les echo, pour être sûr de celui dans lequel on passe.

echo 1 "$js0"
...................................
echo 2 "$js0"

Hors ligne

#4 Le 11/03/2019, à 21:42

diesel

Re : Condition qui ne fonctionne pas [bash]

Et un

if [ "$js0" == "PLAYSTATION3" ]

ça marche pas mieux ?

Sinon, vérifier que la ligne précédente ne laisse pas traîner un petit espace avant ou après. Tu pourrais, après le premier

echo "$js0"

ajouter un

echo ${#js0}

Si le résultat est "12", ça va. Sinon...

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 11/03/2019, à 21:43)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#5 Le 11/03/2019, à 21:44

Watael

Re : Condition qui ne fonctionne pas [bash]

salut,

hmmm, des caractères invisibles ?

mais, pourquoi est-ce qu'un simple if grep -q 'PLAYSTATIONjesaispasquoi' /proc/bus/input/devices ne suffirait-il pas ?
voire, pourquoi un simple if test -f /dev/input/PLAYSTATIONjesaispasquoi ne suffirait-il pas ?
et même, pourquoi non, là, je plaisante. lol

Dernière modification par Watael (Le 11/03/2019, à 21:45)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 11/03/2019, à 21:53

pingouinux

Re : Condition qui ne fonctionne pas [bash]

Ah oui, vous avez raison diesel83140 et Watael : il semble qu'il y ait 4 espaces derrière PLAYSTATION3.

Édité :
Voici une façon de voir le contenu de la variable

hd <<<"$js0"

Dernière modification par pingouinux (Le 11/03/2019, à 22:50)

Hors ligne

#7 Le 12/03/2019, à 00:32

PowaBanga

Re : Condition qui ne fonctionne pas [bash]

Pour répondre à watael, j'ai besoin de savoir si la manette js0, est bien une PS3, ainsi que sont numéro d'event correspondant. Dans  "/proc/bus/input/devices" ils ne sont pas sur la même ligne.
donc :

 sed -re '/PLAYSTATION\(R\)3 Controller\"|js|Microsoft X-Box 360 pad\"/!d' 

vire tout sauf les ligne avec le nom du controller, est ses "handler" (event* et js*)


 sed -e 's/H: Handlers=//g'|sed -e 's/N: Name=//g'

met tout sur une ligne, ce qui me permettra plus tard de faire une recherche par joystick (js*) sauf que justement le fait que tout soit sur une ligne ça fou la merde, donc...


sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' | sed -e 's/\"Microsoft X-Box/\n"Microsoft X-Box/g' | sed -e 's/\"PLAYSTATION\(R\)3 Controller/\n\"PLAYSTATION\(R\)3 Controller/g' 

ceci permet de mettre les controller Xbox, et PS3 sur des lignes différentes (dans mon ca il ne peut pas y en avoir d'autres, ça tombe assez bien.
J'ai à présent, les info relative à chaque joystick (event et NAME) sur la même ligne. Toujours via sed, je peux donc isoler les infos spécifiques à chaque manettes


sed -e '/js0/!d' 

selectionne le joystick 1


sed -re 's/\"|event[0-9]*|js[0-9]*//g' | sed -e 's/(R)//g' |sed -e 's/Controller//g'

et ceci permet d'isoler l'info dont j'ai besoin spécifiquement pour cette manette afin de la mettre dans une variable

Après, pour isoler l'event correspondant, c'est plus simple étant donné que l'information du numéro de joystick et de son event spécifique sont déjà sur la même ligne

et finalemant tant qu'on y est

screen -dmS js0 xboxdrv --evdev /dev/input/$js0 --config /home/powabanga/Téléchargements/playstation3.xboxdrv

me permettra plus tard éventuellement de mettre une condition pour ne pas exécuter xboxdrv si la manette xbox est déjà émulée pour cette manette, voir de créer une boucle pour vérifier que la manette pour la quelle xboxdrv est en train d'émuler le controlleur Xbox n'est pas déconnectée, et si c'est le cas, éteindre le script via un "screen -X -S $js0 quit"


J'ai 10 controllers PS3 non officiel (shanwan clone) qui sont connecté via bluetooth, je n'ai rien qui ressemble à "/dev/input/PLAYSTATION" dans mes fichiers, et j'ai donc l'intention de répéter ce script pour les 20 sortie js* possible.

Cependant si tu a des idées pour améliorer mon script, honnêtement je suis prenneur, je trouve moi même que ce que j'ai réalisé pour l'instant est assez brouillon


même s'il fonctionne à présent :

#!/bin/bash
js0="$(cat /proc/bus/input/devices | sed -re '/PLAYSTATION\(R\)3 Controller\"|js|Microsoft X-Box 360 pad\"/!d' | sed -e 's/H: Handlers=//g' |sed -e 's/N: Name=//g'|sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' | sed -e 's/\"Microsoft X-Box/\n"Microsoft X-Box/g' | sed -e 's/\"PLAYSTATION\(R\)3 Controller/\n\"PLAYSTATION\(R\)3 Controller/g' | sed -e '/js0/!d' | sed -re 's/\"|event[0-9]*|js[0-9]*//g' | sed -e 's/(R)//g' |sed -e 's/Controller//g')"
echo "$js0"
	if [ "$js0" == "PLAYSTATION3    " ]; then
js0=$(cat /proc/bus/input/devices | sed -e '/js0/!d' | sed -e 's/H: Handlers=//g' |sed -e 's/ js0 //g')
echo $js0
screen -dmS js0 xboxdrv --evdev /dev/input/$js0 --config /home/powabanga/Téléchargements/playstation3.xboxdrv
	fi
echo fin

qui résulte sur

'/home/powabanga/Documents/trucs/scripts/variableps3.sh' 
PLAYSTATION3    
event17
fin

Graçe à vous, j'ai maintenant un script qui me permet d'émuler une manette spécifique en xbox sans que j'ai rien à faire.  Merci !

Prochaines étapes, faire une boucle pour éteindre l'émulation quand la manette est déconnectée, empêcher l'émulation d'une manette qui est déjà émulée via une nouvelle condition, et limitte, je pourrais faire une boucle qui interoge tous les joystick allumé pour savoir s'ils sont émulé ou non, pour lancer le script directement dessus... ça le rendrait plus légé que de l'écrire 20 fois pour le relancer tout en entier à chaque fois...

Dernière modification par PowaBanga (Le 12/03/2019, à 00:52)

Hors ligne

#8 Le 12/03/2019, à 00:48

Watael

Re : Condition qui ne fonctionne pas [bash]

si tu veux bien, je voudrais que tu partages ton /proc/bus/input/devices, ainsi que les informations que tu veux en extraire, et les informations dont tu disposes pour les repérer, et le format dans lequel tu veux les utiliser.

on doit pouvoir faire mieux (plus simple, plus clair) que cette suite interminable de sed.

Dernière modification par Watael (Le 12/03/2019, à 00:48)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 12/03/2019, à 01:02

PowaBanga

Re : Condition qui ne fonctionne pas [bash]

Avec plaisir ^^
Donc en fait, il y a le nom du conroller, et un peu plus bas, une ligne avec le numéro d'event et le js correspondant -> jso pour joystick0, js1 pour joystick1, etc...

cat /proc/bus/input/devices
I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=PNP0C0C/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0
U: Uniq=
H: Handlers=kbd event0 
B: PROP=0
B: EV=3
B: KEY=10000000000000 0

I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input1
U: Uniq=
H: Handlers=event1 
B: PROP=0
B: EV=21
B: SW=1

I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=LNXPWRBN/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
U: Uniq=
H: Handlers=kbd event2 
B: PROP=0
B: EV=3
B: KEY=10000000000000 0

I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input3
U: Uniq=
H: Handlers=sysrq kbd event3 leds 
B: PROP=0
B: EV=120013
B: KEY=20000 20 0 0 1500f02100000 3803078f900d401 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7

I: Bus=0003 Vendor=046d Product=101f Version=0111
N: Name="Logitech M305"
P: Phys=usb-0000:00:1d.0-1.1:3
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.2/0003:046D:C52B.0003/0003:046D:101F.0006/input/input15
U: Uniq=101f-86-b0-a7-da
H: Handlers=event4 mouse0 
B: PROP=0
B: EV=17
B: KEY=ffff0000 0 0 0 0
B: REL=1943
B: MSC=10

I: Bus=0003 Vendor=046d Product=4004 Version=0111
N: Name="Logitech K360"
P: Phys=usb-0000:00:1d.0-1.1:1
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.2/0003:046D:C52B.0003/0003:046D:4004.0004/input/input16
U: Uniq=4004-9b-22-46-07
H: Handlers=sysrq kbd event5 leds 
B: PROP=0
B: EV=12001f
B: KEY=3007f 0 0 483ffff17aff32d bf54444600000000 1 130f938b17c007 ffff7bfad941dfff febeffdfffefffff fffffffffffffffe
B: REL=1040
B: ABS=100000000
B: MSC=10
B: LED=1f

I: Bus=0003 Vendor=046d Product=4008 Version=0111
N: Name="Logitech M185"
P: Phys=usb-0000:00:1d.0-1.1:2
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.2/0003:046D:C52B.0003/0003:046D:4008.0005/input/input17
U: Uniq=4008-be-01-93-bb
H: Handlers=event6 mouse1 
B: PROP=0
B: EV=17
B: KEY=ffff0000 0 0 0 0
B: REL=1943
B: MSC=10

I: Bus=0010 Vendor=001f Product=0001 Version=0100
N: Name="PC Speaker"
P: Phys=isa0061/input0
S: Sysfs=/devices/platform/pcspkr/input/input18
U: Uniq=
H: Handlers=kbd event7 
B: PROP=0
B: EV=40001
B: SND=6

I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="HP WMI hotkeys"
P: Phys=wmi/input0
S: Sysfs=/devices/virtual/input/input20
U: Uniq=
H: Handlers=kbd event8 
B: PROP=0
B: EV=33
B: KEY=4000000000 0 1000700000000 2102400 0 0
B: MSC=10
B: SW=0

I: Bus=0011 Vendor=0002 Product=0007 Version=01b1
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input19
U: Uniq=
H: Handlers=event9 mouse2 
B: PROP=9
B: EV=b
B: KEY=6420 30000 0 0 0 0
B: ABS=260800011000003

I: Bus=0019 Vendor=0000 Product=0006 Version=0000
N: Name="Video Bus"
P: Phys=LNXVIDEO/video/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input21
U: Uniq=
H: Handlers=kbd event10 
B: PROP=0
B: EV=3
B: KEY=3e000b00000000 0 0 0

I: Bus=0003 Vendor=090c Product=37bc Version=0002
N: Name="HP Webcam-101"
P: Phys=usb-0000:00:1d.0-1.5/button
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5/2-1.5:1.0/input/input22
U: Uniq=
H: Handlers=kbd event11 
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0

I: Bus=0001 Vendor=10ec Product=0270 Version=0001
N: Name="HDA Digital PCBeep"
P: Phys=card0/codec#0/beep0
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input23
U: Uniq=
H: Handlers=kbd event12 
B: PROP=0
B: EV=40001
B: SND=6

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel MID Mic"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input24
U: Uniq=
H: Handlers=event13 
B: PROP=0
B: EV=21
B: SW=10

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel MID Headphone"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input25
U: Uniq=
H: Handlers=event14 
B: PROP=0
B: EV=21
B: SW=4

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel MID HDMI/DP,pcm=3"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input26
U: Uniq=
H: Handlers=event15 
B: PROP=0
B: EV=21
B: SW=140

I: Bus=0003 Vendor=045e Product=028e Version=0110
N: Name="Microsoft X-Box 360 pad"
P: Phys=
S: Sysfs=/devices/virtual/input/input41
U: Uniq=
H: Handlers=event18 js1 
B: PROP=0
B: EV=b
B: KEY=7cdb000000000000 0 0 0 0
B: ABS=3003f

I: Bus=0005 Vendor=054c Product=0268 Version=8000
N: Name="PLAYSTATION(R)3 Controller Motion Sensors"
P: Phys=00:1a:7d:da:71:11
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/bluetooth/hci0/hci0:71/0005:054C:0268.000D/input/input43
U: Uniq=06:19:9e:6e:63:25
H: Handlers=event16 
B: PROP=40
B: EV=9
B: ABS=7

I: Bus=0005 Vendor=054c Product=0268 Version=8000
N: Name="PLAYSTATION(R)3 Controller"
P: Phys=00:1a:7d:da:71:11
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/bluetooth/hci0/hci0:71/0005:054C:0268.000D/input/input42
U: Uniq=06:19:9e:6e:63:25
H: Handlers=event17 js0 
B: PROP=0
B: EV=20001b
B: KEY=f00000000 0 0 0 7fdb000000000000 0 0 0 0
B: ABS=3f
B: MSC=10
B: FF=107030000 0

I: Bus=0005 Vendor=054c Product=0268 Version=8000
N: Name="PLAYSTATION(R)3 Controller Motion Sensors"
P: Phys=00:1a:7d:da:71:11
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/bluetooth/hci0/hci0:66/0005:054C:0268.000E/input/input45
U: Uniq=07:45:9e:99:63:25
H: Handlers=event19 
B: PROP=40
B: EV=9
B: ABS=7

I: Bus=0005 Vendor=054c Product=0268 Version=8000
N: Name="PLAYSTATION(R)3 Controller"
P: Phys=00:1a:7d:da:71:11
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/bluetooth/hci0/hci0:66/0005:054C:0268.000E/input/input44
U: Uniq=07:45:9e:99:63:25
H: Handlers=event20 js2 
B: PROP=0
B: EV=20001b
B: KEY=f00000000 0 0 0 7fdb000000000000 0 0 0 0
B: ABS=3f
B: MSC=10
B: FF=107030000 0

I: Bus=0005 Vendor=054c Product=0268 Version=8000
N: Name="PLAYSTATION(R)3 Controller Motion Sensors"
P: Phys=00:1a:7d:da:71:11
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/bluetooth/hci0/hci0:55/0005:054C:0268.000F/input/input47
U: Uniq=01:46:56:8d:63:25
H: Handlers=event21 
B: PROP=40
B: EV=9
B: ABS=7

I: Bus=0005 Vendor=054c Product=0268 Version=8000
N: Name="PLAYSTATION(R)3 Controller"
P: Phys=00:1a:7d:da:71:11
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/bluetooth/hci0/hci0:55/0005:054C:0268.000F/input/input46
U: Uniq=01:46:56:8d:63:25
H: Handlers=event22 js3 
B: PROP=0
B: EV=20001b
B: KEY=f00000000 0 0 0 7fdb000000000000 0 0 0 0
B: ABS=3f
B: MSC=10
B: FF=107030000 0

J'ai connecté deux autre controlleur juste avant histoire de smile

Après, je ne vois pas ce que tu entends, par "le format dans lequel je souhaite les utiliser"...

Dernière modification par PowaBanga (Le 12/03/2019, à 01:11)

Hors ligne

#10 Le 12/03/2019, à 02:44

Watael

Re : Condition qui ne fonctionne pas [bash]

j'arrive à ça :

sed -n '/^I/{:a;/\n$/! {N;ba;}; /PLAYSTATION\|X-Box/{s/.*Name="\([^"]*\)".*Handlers=\([^\n]*\).*/\1|\2/; /js0/p;};}'
PLAYSTATION(R)3 Controller|event17 js0

la barre verticale sert de délimiteur.

on peut encore filtrer avec sed, ou modifier le format...


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 16/03/2019, à 16:37

LeoMajor

Re : Condition qui ne fonctionne pas [bash]

bonjour,
il faut que tu passes par les udev (créer une règle) ; udevadm
moteur de recherche: udev usb rule run xboxdrv
doc1
doc udev

Hors ligne