Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

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 14/04/2021, à 09:58

PowaBanga

envoyer deux variable d'une liste dans une boucle ou fonction

salut à tous,
j'aimerais faire une boucle sur le résultat de cette commande :

cat /proc/bus/input/devices | sed -re '/PLAYSTATION\(R\)3 Controller\"|js|X-Box|Xbox|\"SHANWAN PS3 GamePad Motion Sensors\"/!d' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\nH: Handlers=/ /g' | sed 's/N: Name=//g ; /^H:/d ; s/js[0-9]*//g ; s/kbd //g'
"SHANWAN PS3 GamePad Motion Sensors" event8  
"Xbox Wireless Controller" event21  

de sorte à avoir, pour chaque ligne, deux variables $1 pour le nom de la manette , et $2 pour l'event , qui seraient exécutées

du genre :

for 1 and 2 in $(macomande)
do
echo "$1 et $2"
done

ou

fonction ()
{
echo "$1 et $2
}
fonction $(macommande)

le souci dans le cas de la fonction, c'est qu'il considère que chaque espace sépare toutes les variables...

Je cale un peu la dessus... quelqu'un aurait une idée ?

Hors ligne

#2 Le 14/04/2021, à 10:30

pingouinux

Re : envoyer deux variable d'une liste dans une boucle ou fonction

Bonjour,
Peux-tu montrer le résultat complet de

cat /proc/bus/input/devices

et ce que tu souhaites récupérer dans les 2 variables.

Hors ligne

#3 Le 14/04/2021, à 11:29

nany

Re : envoyer deux variable d'une liste dans une boucle ou fonction

Bonjour,


Dans une boucle, je ne sais pas mais on faire avec awk :

awk -F'"' '{print $2" et"$3}' <<< $(macommande)

Mais tant qu’à utiliser awk, autant l’utiliser à la place des sed imbriqués dans la commande et qui deviennent vite incompréhensibles :

cat /proc/bus/input/devices | awk -F'=' '/PLAYSTATION\(R\)3 Controller\"|js|X-Box|Xbox|\"SHANWAN PS3 GamePad Motion Sensors\"/ { nl = NR ; ne[i++, 0] = $2 } { if (NR == nl+4) ne[i, 1] = $2 } END {for (n=0; n<i; n++) print ne[n, 0],"et",ne[n, 1] ; }'

Et je pense que ceci fera la même chose :

cat /proc/bus/input/devices | awk -F'=' '/PLAYSTATION|js|X-Box|Xbox|SHANWAN/ { nl = NR ; ne[i++, 0] = $2 } { if (NR == nl+4) ne[i, 1] = $2 } END {for (n=0; n<i; n++) print ne[n, 0],"et",ne[n, 1] ; }'

Dernière modification par nany (Le 14/04/2021, à 11:31)

Hors ligne

#4 Le 14/04/2021, à 20:26

PowaBanga

Re : envoyer deux variable d'une liste dans une boucle ou fonction

@pingoulinux je souhaite donc récupérer le nom de la mannette et l'event auquel il correspond.
Mais ça j'y suis déjà arrivé avec :

cat /proc/bus/input/devices | sed -re '/PLAYSTATION\(R\)3 Controller\"|js|X-Box|Xbox|\"SHANWAN PS3 GamePad Motion Sensors\"/!d' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\nH: Handlers=/ /g' | sed 's/N: Name=//g ; /^H:/d ; s/js[0-9]*//g ; s/kbd //g'

Toutefois, je t'envois quand même la réponse de la commande :

cat /proc/bus/input/devices
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/input0
U: Uniq=
H: Handlers=event0 
B: PROP=0
B: EV=21
B: SW=1

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/input1
U: Uniq=
H: Handlers=kbd event1 
B: PROP=0
B: EV=3
B: KEY=10000000000000 0

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=ab83
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 leds event3 
B: PROP=0
B: EV=120013
B: KEY=20000 20 0 0 1500f02100000 3803078f900d401 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7

I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="HP Wireless hotkeys"
P: Phys=hpq6001/input0
S: Sysfs=/devices/virtual/input/input5
U: Uniq=
H: Handlers=kbd event4 rfkill 
B: PROP=0
B: EV=3
B: KEY=80000000000000 0 0 0

I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="ST LIS3LV02DL Accelerometer"
P: Phys=lis3lv02d/input0
S: Sysfs=/devices/platform/lis3lv02d/input/input6
U: Uniq=
H: Handlers=event5 js0 
B: PROP=0
B: EV=9
B: ABS=7

I: Bus=0003 Vendor=05c8 Product=03bc Version=0003
N: Name="HP Wide Vision HD Camera: HP Wi"
P: Phys=usb-0000:00:14.0-3/button
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/input/input9
U: Uniq=
H: Handlers=kbd event7 
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0

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

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/input12
U: Uniq=
H: Handlers=kbd event10 
B: PROP=0
B: EV=3
B: KEY=3e000b00000000 0 0 0

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/device:3a/LNXVIDEO:01/input/input13
U: Uniq=
H: Handlers=kbd event11 
B: PROP=0
B: EV=3
B: KEY=3e000b00000000 0 0 0

I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="HP WMI hotkeys"
P: Phys=wmi/input0
S: Sysfs=/devices/virtual/input/input14
U: Uniq=
H: Handlers=kbd event12 
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=01a1
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input11
U: Uniq=
H: Handlers=event13 mouse0 
B: PROP=5
B: EV=b
B: KEY=e520 10000 0 0 0 0
B: ABS=660800011000003

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

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

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

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

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

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

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

@nany, c'est pour envoyer les informations lignes par ligne dans une commande de ce type  :

xboxdrv --evdev /dev/input/$EVENTNUM --config ~/path/$NOMMANNETTE.xboxdrv

Du coup, je ne comprend pas très bien comment j'applique ça dans ta proposition en fait... awk je connais pas du tout, si tu peux m'aider c'est top smile

Hors ligne

#5 Le 14/04/2021, à 20:45

nany

Re : envoyer deux variable d'une liste dans une boucle ou fonction

PowaBanga a écrit :

@nany, c'est pour envoyer les informations lignes par ligne dans une commande de ce type  :

xboxdrv --evdev /dev/input/$EVENTNUM --config ~/path/$NOMMANNETTE.xboxdrv

Du coup, je ne comprend pas très bien comment j'applique ça dans ta proposition en fait... awk je connais pas du tout, si tu peux m'aider c'est top smile

$EVENTNUM doit correspondre à quoi exactement ? Juste le numéro ou bien eventX ?

[edit]
J’ai ça :

awk -F'=' 'BEGIN { i = -1 } /PLAYSTATION|js|X-Box|Xbox|SHANWAN/ { nl = NR ; gsub(" ","\\ ",$2) ; gsub("\"","",$2) ; gsub("\"","",$3) ; if (/pcm/) { ne[i++, 0] = $2"="$3 } else { ne[i++, 0] = $2 } } { if (NR == nl+4) { ind = index($2, "event") ; ne[j++, 1] = substr($2, ind, 7) } } END {for (n=0; n<i; n++) print "xboxdrv --evdev /dev/input/"ne[n, 1]" --config ~/path/"ne[n, 0]".xboxdrv" ; }' /proc/bus/input/devices

Si c’est correct, pour exécuter :

$(awk -F'=' 'BEGIN { i = -1 } /PLAYSTATION|js|X-Box|Xbox|SHANWAN/ { nl = NR ; gsub(" ","\\ ",$2) ; gsub("\"","",$2) ; gsub("\"","",$3) ; if (/pcm/) { ne[i++, 0] = $2"="$3 } else { ne[i++, 0] = $2 } } { if (NR == nl+4) { ind = index($2, "event") ; ne[j++, 1] = substr($2, ind, 7) } } END {for (n=0; n<i; n++) print "xboxdrv --evdev /dev/input/"ne[n, 1]" --config ~/path/"ne[n, 0]".xboxdrv" ; }' /proc/bus/input/devices)

[/edit]

Dernière modification par nany (Le 15/04/2021, à 14:58)

Hors ligne

#6 Le 14/04/2021, à 21:58

pingouinux

Re : envoyer deux variable d'une liste dans une boucle ou fonction

@PowaBanga #4 :
En appliquant la longue succession de sed au résultat du cat que tu montres en #4, je n'obtiens aucun retour.

Hors ligne

#7 Le 15/04/2021, à 11:27

Tawal

Re : envoyer deux variable d'une liste dans une boucle ou fonction

Hello,

pingouinux a écrit :

@PowaBanga #4 :
En appliquant la longue succession de sed au résultat du cat que tu montres en #4, je n'obtiens aucun retour.

Normal, il n'y a aucune référence à PLAYSTATION dans ce retour cat du #4


Le savoir n'a d’intérêt que si on le transmet.
Ubuntu-Mate 20.04.2 LTS Virtualisée
Useless Use of Cat Award

Hors ligne

#8 Le 29/04/2021, à 13:02

PowaBanga

Re : envoyer deux variable d'une liste dans une boucle ou fonction

bon ok, j'ai rien compris à awk, d'autant plus que ca ne fonctionne pas comme il faut chez moi, aussi, le résultat est bien plus court via sed au final.

awk -F'=' 'BEGIN { i = -1 } /PLAYSTATION|js|X-Box|Xbox|SHANWAN/ { nl = NR ; gsub(" ","\\ ",$2) ; gsub("\"","",$2) ; gsub("\"","",$3) ; if (/pcm/) { ne[i++, 0] = $2"="$3 } else { ne[i++, 0] = $2 } } { if (NR == nl+4) { ind = index($2, "event") ; ne[j++, 1] = substr($2, ind, 7) } } END {for (n=0; n<i; n++) print "xboxdrv --evdev /dev/input/"ne[n, 1]" --config ~/path/"ne[n, 0]".xboxdrv" ; }' /proc/bus/input/devices
xboxdrv --evdev /dev/input//device --config ~/path/Sony\ PLAYSTATION(R)3\ Controller\ Motion\ Sensors.xboxdrv
xboxdrv --evdev /dev/input/ --config ~/path/Sony\ PLAYSTATION(R)3\ Controller.xboxdrv
xboxdrv --evdev /dev/input/event20 --config ~/path/event21\ js1\ .xboxdrv
xboxdrv --evdev /dev/input/3f --config ~/path/Xbox\ Wireless\ Controller.xboxdrv
xboxdrv --evdev /dev/input/30627 --config ~/path/kbd\ event22\ js2\ .xboxdrv

Du coup j'ai quand même décidé d'appliquer l'idée de nany avec sed, et voici les deux essais que j'ai fais avec un échec, que voici :

cat /proc/bus/input/devices | sed -re '/PLAYSTATION\(R\)3 Controller\"|js|X-Box|Xbox|SHANWAN PS3 GamePad Motion Sensors/!d' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\"\nH: Handlers=/.xboxdrv\" --evdev \/dev\/input\//g' | sed 's/N: Name=//g ; /^H:/d ; s/js[0-9]*//g ; s/kbd //g ; s/^\"/xboxdrv -c \"/g'
xboxdrv -c "Sony PLAYSTATION(R)3 Controller.xboxdrv" --evdev /dev/input/event21 

$(cat /proc/bus/input/devices | sed -re '/PLAYSTATION\(R\)3 Controller\"|js|X-Box|Xbox|SHANWAN PS3 GamePad Motion Sensors/!d' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\"\nH: Handlers=/.xboxdrv\" --evdev \/dev\/input\//g' | sed 's/N: Name=//g ; /^H:/d ; s/js[0-9]*//g ; s/kbd //g ; s/^\"/xboxdrv -c \"/g')

-- [ ERROR ] ------------------------------------------------------
CommandLineParser::read_config_file(): couldn't open: "Sony
cat /proc/bus/input/devices | sed -re '/PLAYSTATION\(R\)3 Controller\"|js|X-Box|Xbox|SHANWAN PS3 GamePad Motion Sensors/!d' | sed 's/ /\\ /g ; s/(/\(/g ; s/)/\)/g' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\"\nH:\\ Handlers=/.xboxdrv --evdev \/dev\/input\//g' | sed 's/N:\\ Name=//g ; /^H:/d ; s/\\ js[0-9]*\\//g ; s/kbd //g ; s/^\"/xboxdrv -c /g'
xboxdrv -c Sony\ PLAYSTATION(R)3\ Controller.xboxdrv --evdev /dev/input/event21 

$(cat /proc/bus/input/devices | sed -re '/PLAYSTATION\(R\)3 Controller\"|js|X-Box|Xbox|SHANWAN PS3 GamePad Motion Sensors/!d' | sed 's/ /\\ /g ; s/(/\(/g ; s/)/\)/g' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\"\nH:\\ Handlers=/.xboxdrv --evdev \/dev\/input\//g' | sed 's/N:\\ Name=//g ; /^H:/d ; s/\\ js[0-9]*\\//g ; s/kbd //g ; s/^\"/xboxdrv -c /g')

-- [ ERROR ] ------------------------------------------------------
CommandLineParser::read_config_file(): couldn't open: Sony\

En sachant que la commande

xboxdrv -c "Sony PLAYSTATION(R)3 Controller.xboxdrv" --evdev /dev/input/event21

fonctionne parfaitement bien smile

Dernière modification par PowaBanga (Le 29/04/2021, à 13:17)

Hors ligne

#9 Le 30/04/2021, à 05:25

nany

Re : envoyer deux variable d'une liste dans une boucle ou fonction

Essaie avec ça :

awk -F'=' 'BEGIN { j = -1 } /PLAYSTATION|js|X-Box|Xbox|SHANWAN/ { nl = NR ; if (/pcm/) { ne[i++, 0] = $2"="$3 } else { ne[i++, 0] = $2 } } { if (NR == nl+4) { ind = index($2, "event") ; ne[j++, 1] = substr($2, ind, 7) } } END {for (n=0; n<i; n++) print "xboxdrv --evdev /dev/input/"ne[n, 1]" --config ~/path/"ne[n, 0]".xboxdrv" ; }' /proc/bus/input/devices

Pour exécuter :

$(awk -F'=' 'BEGIN { j = -1 } /PLAYSTATION|js|X-Box|Xbox|SHANWAN/ { nl = NR ; if (/pcm/) { ne[i++, 0] = $2"="$3 } else { ne[i++, 0] = $2 } } { if (NR == nl+4) { ind = index($2, "event") ; ne[j++, 1] = substr($2, ind, 7) } } END {for (n=0; n<i; n++) print "xboxdrv --evdev /dev/input/"ne[n, 1]" --config ~/path/"ne[n, 0]".xboxdrv" ; }' /proc/bus/input/devices)

Hors ligne

#10 Le 30/04/2021, à 08:05

MicP

Re : envoyer deux variable d'une liste dans une boucle ou fonction

Bonjour

Et en utilisant les liens contenus dans le répertoire /dev/input/by-id/
est-ce que le retour de cette ligne de commandes pourrait être utilisable ?

myReg='PLAYSTATION|js|X-Box|Xbox|SHANWAN'; for f in /dev/input/by-id/*event*; do [[ $f =~ $myReg ]] && echo $f $(readlink $f); done

Bien sûr, on peut encore utiliser bash pour fignoler la sortie …

Dernière modification par MicP (Le 30/04/2021, à 08:15)

Hors ligne

#11 Le 30/04/2021, à 13:26

PowaBanga

Re : envoyer deux variable d'une liste dans une boucle ou fonction

@nany ton code n'a pas l'air bien terrible chez moi... hmm

awk -F'=' 'BEGIN { j = -1 } /PLAYSTATION|js|X-Box|Xbox|SHANWAN/ { nl = NR ; if (/pcm/) { ne[i++, 0] = $2"="$3 } else { ne[i++, 0] = $2 } } { if (NR == nl+4) { ind = index($2, "event") ; ne[j++, 1] = substr($2, ind, 7) } } END {for (n=0; n<i; n++) print "xboxdrv --evdev /dev/input/"ne[n, 1]" --config ~/path/"ne[n, 0]".xboxdrv" ; }' /proc/bus/input/devices
xboxdrv --evdev /dev/input/ --config ~/path/event9 js0 .xboxdrv
xboxdrv --evdev /dev/input/event4  --config ~/path/"Sony PLAYSTATION(R)3 Controller Motion Sensors".xboxdrv
xboxdrv --evdev /dev/input/3f --config ~/path/"Sony PLAYSTATION(R)3 Controller".xboxdrv
xboxdrv --evdev /dev/input/30627 --config ~/path/event5 js1 .xboxdrv
xboxdrv --evdev /dev/input/ --config ~/path/"Xbox Wireless Controller".xboxdrv
xboxdrv --evdev /dev/input/ --config ~/path/kbd event22 js2 .xboxdrv

@Mlcp, ta question est pertinante, mais ma mannette xbox n'apparait pas dans ce dossier hmm . Avec le fichier /proc/bus/devices je peux lister séparément tout ce que le système considère comme une mannette grâce à la ligne qui contient "js"

ls /dev/input/by-id
usb-Logitech_USB_Receiver-if01-event-mouse
usb-Logitech_USB_Receiver-if01-mouse
usb-Sony_PLAYSTATION_R_3_Controller-event-if00
usb-Sony_PLAYSTATION_R_3_Controller-event-joystick
usb-Sony_PLAYSTATION_R_3_Controller-joystick
usb-SunplusIT_Inc_HP_Wide_Vision_HD_Camera-event-if00

ls /dev/input/by-id
usb-Logitech_USB_Receiver-if01-event-mouse
usb-Logitech_USB_Receiver-if01-mouse
usb-Sony_PLAYSTATION_R_3_Controller-event-if00
usb-Sony_PLAYSTATION_R_3_Controller-event-joystick
usb-Sony_PLAYSTATION_R_3_Controller-joystick
usb-SunplusIT_Inc_HP_Wide_Vision_HD_Camera-event-if00

Alors comme j'ai continé de cogiter, je poste le résultat que j'ai obtenu ici depuis.
J'ai donc continué de travailler sur le fichier /cat/proc/devices

  1. Je remplace donc sur mon résultat tous les espaces par un carractère qui n'y sera pas

  2. Ensuite, je me sers des apostrophes (") qui ne sont présent que dans la première variable pour les séparer

  3. et au final je remplace tous les "@" par les espaces d'origine

for i in $(cat /proc/bus/input/devices | sed -re '/PLAYSTATION\(R\)3 Controller\"|js|X-Box|Xbox|SHANWAN PS3 GamePad Motion Sensors/!d' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\"\nH: Handlers=/.xboxdrv\" /g' | sed 's/N: Name=//g ; /^H:/d ; s/js[0-9]*//g ; s/kbd //g ; s/ /@/g')

	do
		for e in $(echo $i | sed ' s/\"@/\" /g ; s/@@//g')
			do
				if [ 1 == $(echo $e | sed -e 's/.*\"/1/') ]
				then
					VAR1="$(echo $e | sed -e 's/@/ /g ; s/\"//g')"
				else
					VAR2=$e
				fi
		done
		echo "gamepad: $VAR1 detected in $VAR2"
		xboxdrv -c $VAR1 --evdev echo /dev/input/$VAR2 $
done

Sauf que cela résulte là dessu :

gamepad: Sony PLAYSTATION(R)3 Controller.xboxdrv detected in event5

-- [ ERROR ] ------------------------------------------------------
CommandLineParser::read_config_file(): couldn't open: Sony
gamepad: Xbox Wireless Controller.xboxdrv detected in event22

-- [ ERROR ] ------------------------------------------------------
CommandLineParser::read_config_file(): couldn't open: Xbox

Voilà, si quelqu'un a une idée d'une méthode plus simple, franchement je suis preneur à 100%, je vais donc laisser le topic ouvert un peu avant de le fermer smile

Dernière modification par PowaBanga (Le 30/04/2021, à 15:48)

Hors ligne

#12 Le 30/04/2021, à 14:14

MicP

Re : envoyer deux variable d'une liste dans une boucle ou fonction

… tout ce que le système considère comme une mannette …

Si tes manettes sont bien toutes connectées à la machine sur laquelle tu lances ces lignes de commandes,
tous les fichiers liens vers un fichier event du répertoire /dev/input/ et qui serait associé à un périphérique considéré comme un joystick
seront retournés par chacune de ces trois lignes de commandes suivantes

ls -l /dev/input/by-path/*event-joystick
ls -l /dev/input/by-id/*event-joystick
for f in /dev/input/by-id/*event-joystick; do echo $f $(readlink $f); done

Dernière modification par MicP (Le 30/04/2021, à 14:22)

Hors ligne

#13 Le 30/04/2021, à 15:52

PowaBanga

Re : envoyer deux variable d'une liste dans une boucle ou fonction

Mlcp je n'ai que ma mannette ps3 qui est connectée via USB, pas ma mannette xbox qui elle l'es via le bluetooth

ps j'ai édité mon topic précédent car je n'avais pas encore testé mon résultat, et final je suis de retour au point mort -_-"

Hors ligne

#14 Le 30/04/2021, à 16:10

MicP

Re : envoyer deux variable d'une liste dans une boucle ou fonction

… je n'ai que ma mannette ps3 qui est connectée via USB, pas ma mannette xbox qui elle l'es via le bluetooth …

Dans le répertoire /dev/input/ il n'y a pas que les périphériques connectés par USB,
mais tous les périphériques d'entrée quel que soient leur mode de connexion.
Par exemple, tu y trouveras le ou les boutons Marche/Arrêt, le clavier intégré à la machine, le Lid Switch, le TouchPad etc.

EDIT : Effectivement, s'il y a bien l'event concerné dans la liste /dev/input/event*
mon clavier BlueTooth n'est pas listé dans les répertoires /dev/input/by-path et /dev/input/by-id

Dernière modification par MicP (Le 30/04/2021, à 16:33)

Hors ligne

#15 Le 01/05/2021, à 21:44

nany

Re : envoyer deux variable d'une liste dans une boucle ou fonction

PowaBanga a écrit :

@nany ton code n'a pas l'air bien terrible chez moi... hmm

Arf ! hmm
Pourtant ça s’affiche correctement chez avec mes périphériques d’entrée. Mais je n’est pas de manette.
Peux-tu poster le retour de

cat /proc/bus/input/devices

avec tes manettes connectées (car on ne les voit pas dans ton retour en #4) que je puisse tester avec ça ?

Hors ligne

#16 Le 02/05/2021, à 10:05

PowaBanga

Re : envoyer deux variable d'une liste dans une boucle ou fonction

cat /proc/bus/input/devices
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/input0
U: Uniq=
H: Handlers=event0 
B: PROP=0
B: EV=21
B: SW=1

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/input1
U: Uniq=
H: Handlers=kbd event1 
B: PROP=0
B: EV=3
B: KEY=10000000000000 0

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=ab83
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 leds event3 
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=054c Product=0268 Version=8110
N: Name="SHANWAN PS3 GamePad Motion Sensors"
P: Phys=usb-0000:00:14.0-1/input0
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:054C:0268.0001/input/input6
U: Uniq=06:19:9e:6e:63:25
H: Handlers=event4 
B: PROP=40
B: EV=9
B: ABS=7

I: Bus=0003 Vendor=054c Product=0268 Version=8110
N: Name="SHANWAN PS3 GamePad"
P: Phys=usb-0000:00:14.0-1/input0
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:054C:0268.0001/input/input5
U: Uniq=06:19:9e:6e:63:25
H: Handlers=event5 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=0019 Vendor=0000 Product=0000 Version=0000
N: Name="HP Wireless hotkeys"
P: Phys=hpq6001/input0
S: Sysfs=/devices/virtual/input/input13
U: Uniq=
H: Handlers=kbd event6 rfkill 
B: PROP=0
B: EV=3
B: KEY=80000000000000 0 0 0

I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="ST LIS3LV02DL Accelerometer"
P: Phys=lis3lv02d/input0
S: Sysfs=/devices/platform/lis3lv02d/input/input14
U: Uniq=
H: Handlers=event10 js1 
B: PROP=0
B: EV=9
B: ABS=7

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

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/input17
U: Uniq=
H: Handlers=kbd event8 
B: PROP=0
B: EV=3
B: KEY=3e000b00000000 0 0 0

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/device:3a/LNXVIDEO:01/input/input18
U: Uniq=
H: Handlers=kbd event9 
B: PROP=0
B: EV=3
B: KEY=3e000b00000000 0 0 0

I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="HP WMI hotkeys"
P: Phys=wmi/input0
S: Sysfs=/devices/virtual/input/input23
U: Uniq=
H: Handlers=kbd event12 
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=01a1
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input16
U: Uniq=
H: Handlers=event13 mouse1 
B: PROP=5
B: EV=b
B: KEY=e520 10000 0 0 0 0
B: ABS=660800011000003

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

I: Bus=0003 Vendor=05c8 Product=03bc Version=0003
N: Name="HP Wide Vision HD Camera: HP Wi"
P: Phys=usb-0000:00:14.0-3/button
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/input/input31
U: Uniq=
H: Handlers=kbd event14 
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0

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

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

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

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

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

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

I: Bus=0003 Vendor=046d Product=4054 Version=0111
N: Name="Logitech Wireless Mouse"
P: Phys=usb-0000:00:14.0-2/input1:2
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.1/0003:046D:C534.0003/0003:046D:4054.0004/input/input32
U: Uniq=4054-00-00-00-00
H: Handlers=event21 mouse0 
B: PROP=0
B: EV=17
B: KEY=ffff0000 0 0 0 0
B: REL=1943
B: MSC=10

I: Bus=0005 Vendor=045e Product=0b13 Version=0501
N: Name="Xbox Wireless Controller"
P: Phys=80:2b:f9:ac:3b:70
S: Sysfs=/devices/virtual/misc/uhid/0005:045E:0B13.0005/input/input34
U: Uniq=98:7a:14:ca:34:ae
H: Handlers=kbd event22 js2 
B: PROP=0
B: EV=1b
B: KEY=7fff000000000000 0 8000000000 0 0
B: ABS=30627
B: MSC=10

Hors ligne

#17 Le 02/05/2021, à 16:05

nany

Re : envoyer deux variable d'une liste dans une boucle ou fonction

Bon, c’était simplement la recherche su js qui était en trop dans mon script awk.
Avec ça :

awk -F'=' 'BEGIN { j = -1 } /PLAYSTATION|X-Box|Xbox|SHANWAN/ { nl = NR ; ne[i++, 0] = $2 } { if (NR == nl+4) { ind = index($2, "event") ; ne[j++, 1] = substr($2, ind, 7) } } END {for (n=0; n<i; n++) print "xboxdrv --evdev /dev/input/"ne[n, 1]" --config ~/path/"ne[n, 0]".xboxdrv" ; }' /proc/bus/input/devices

ça devrait être mieux.
Et, pour exécuter :

$(awk -F'=' 'BEGIN { j = -1 } /PLAYSTATION|X-Box|Xbox|SHANWAN/ { nl = NR ; ne[i++, 0] = $2 } { if (NR == nl+4) { ind = index($2, "event") ; ne[j++, 1] = substr($2, ind, 7) } } END {for (n=0; n<i; n++) print "xboxdrv --evdev /dev/input/"ne[n, 1]" --config ~/path/"ne[n, 0]".xboxdrv" ; }' /proc/bus/input/devices)

Hors ligne

#18 Le 02/05/2021, à 18:17

Watael

Re : envoyer deux variable d'une liste dans une boucle ou fonction

en me fondant sur tout ce que j'ai pu lire :

awk -v search="PLAYSTATION|X-Box|Xbox|SHANWAN" '$0~search{split($0,ar,"=");name=ar[2]}/Handler/&&ar[1]{split($0,ar,"=|event");split(ar[3],a," ");print "system(command...",name,"...event"a[1]")"; delete ar}' /chemin/fichier

?

si c'est bon :

awk -v search="PLAYSTATION|X-Box|Xbox|SHANWAN" '$0~search{split($0,ar,"=");name=ar[2]}/Handler/&&ar[1]{split($0,ar,"=|event");split(ar[3],a," ");system(command..."name"...event"a[1]); delete ar}'

je ne peux pas tester la fonction system(). sad

--
c'est quand même plus facile quand vous avez déjà tout débroussaillé. big_smile

Dernière modification par Watael (Le 02/05/2021, à 18:26)


Welcome to sHell. · eval is evil.

Hors ligne