IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Désactiver le touchpad en Python [Python 3.X]


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Par défaut Désactiver le touchpad en Python
    Bonjour
    je suis sous Linux et je cherche le moyen de désactiver le Touchpad de l'ordi quand la souris est présente
    avec la commande xinput on peut voir les périphériques branchés
    ⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
    ⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
    ⎜   ↳ 2.4G Mouse                              	id=11	[slave  pointer  (2)]
    ⎜   ↳ ETPS/2 Elantech Touchpad                	id=15	[slave  pointer  (2)]
    ⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
        ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
        ↳ Power Button                            	id=6	[slave  keyboard (3)]
        ↳ Asus Wireless Radio Control             	id=7	[slave  keyboard (3)]
        ↳ Video Bus                               	id=8	[slave  keyboard (3)]
        ↳ Power Button                            	id=9	[slave  keyboard (3)]
        ↳ Sleep Button                            	id=10	[slave  keyboard (3)]
        ↳ USB2.0 VGA UVC WebCam: USB2.0 V         	id=12	[slave  keyboard (3)]
        ↳ Asus WMI hotkeys                        	id=13	[slave  keyboard (3)]
        ↳ AT Translated Set 2 keyboard            	id=14	[slave  keyboard (3)]
    j'ai écris le code ci-dessous pour détecter si une souris est branchée et dans ce cas uniquement désactiver le touchpad

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import os
    result=str(os.system("xinput > xinput_result.tmp"))
    print(result)
    fichier1=open("xinput_result.tmp",'r')
    flagmouse=0
     
    for line in fichier1:
      if "Mouse" in line:
        flagmouse=1
        print("la souris est présente")
    fichier1.close()
     
    fichier1=open("xinput_result.tmp",'r')
    for line in fichier1:
      if "Touchpad"  in line and flagmouse==1:
        print("je désactive le touchpad")
        p=line.find("id=")
        os.system("xinput disable "+line[p+3:p+6])
    fichier1.close()
    os.system("rm xinput_result.tmp")
    Je n'ai pas trouvé le moyen de réaliser cette action sans passer par la création de fichier. Avez-vous une idée ? et également pour simplifier le code ?

    Merci par avance de vos conseils

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par ptitjoz Voir le message
    Je n'ai pas trouvé le moyen de réaliser cette action sans passer par la création de fichier. Avez-vous une idée ? et également pour simplifier le code ?
    Peut être que vous pourriez jeter un œil à la bibliothèque externe xinput appelable directement.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 920
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Je n'ai pas trouvé le moyen de réaliser cette action sans passer par la création de fichier. Avez-vous une idée ?
    Oui, (pas testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    result=str(os.system("xinput"))
    result = result.split("\n")
    puis tu boucles dessus...

  4. #4
    Membre confirmé
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Bonjour,


    Oui, (pas testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    result=str(os.system("xinput"))
    result = result.split("\n")
    puis tu boucles dessus...
    Merci j'y avais pensé mais je n'arrive pas à extraire quoique ce soit de cohérent.
    Quelqu'un peut essayer ?
    Merci

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par ptitjoz Voir le message
    Merci j'y avais pensé mais je n'arrive pas à extraire quoique ce soit de cohérent.
    Quelqu'un peut essayer ?
    Normal, os.system ne retourne qu'un entier correspondant au status.
    os.open('commande').read() devrait fonctionner mais il est plutôt recommandé d'utiliser les fonctionnalités du module subprocess.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 920
    Billets dans le blog
    8
    Par défaut
    testé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subprocess.check_output(["xinput", "list"], encoding='UTF-8')

  7. #7
    Membre confirmé
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Par défaut
    Merci de vos conseils que j'ai essayé de prendre en compte

    Voici mon code qui fonctionne
    peut on faire mieux, plus léger voire plus propre ?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import subprocess
    result = subprocess.check_output(["xinput", "list"], encoding='UTF-8')
    result=str(result)
    result=result.split("\n")
    flagMouse=-1
    flagTouchPad=-1
     
    for i in range(len(result)):
      if "Mouse" in result[i]:
        print("souris détectée ligne",i)
        flagMouse=i
      if "Touchpad" in result[i]:
        print("Touchpad détecté ligne",i)
        flagTouchPad=i
    if flagMouse>0 and flagTouchPad>0:
      p=result[flagTouchPad].find("id=")
      subprocess.run(["xinput disable "+result[flagTouchPad][p+3:p+5]],shell=True)
      print("Touchpad désactivé !")

  8. #8
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 920
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    La ligne 3 est inutile car déjà du type str.
    Tu peux utiliser enumerate() pour un code plus lisible.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import subprocess
    result = subprocess.check_output(["xinput", "list"], encoding='UTF-8')
    result=result.split("\n")
    flagMouse, flagMouse = False, False
     
    for index,ligne in enumerate(result,1):
        if "Mouse" in ligne:
            print("souris détectée ligne",index)
            flagMouse = index
        if "Touchpad" in ligne:
            print("Touchpad détecté ligne",index)
            flagTouchPad = index
     
    if flagMouse and flagTouchPad:
        p=result[flagTouchPad-1].find("id=")
        subprocess.run([f"xinput disable {result[flagTouchPad-1][p+3:p+5]}"],shell=True)
        print("Touchpad désactivé !")
    édit: basé sur ton code mais pas testé (pas de souris)

  9. #9
    Membre confirmé
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Par défaut
    Bonjour et merci de ton implication
    oui ça fonctionne avec ta méthode.

    à la ligne 4 j'ai modifié par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    flagMouse, flagTouchPad = False, False
    comme le ID peut être sur une à plusieurs positions j'ai adapté ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p=result[flagTouchPad-1].find("id=")
    p2=result[flagTouchPad-1].find("[",p)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subprocess.run([f"xinput disable {result[flagTouchPad-1][p+3:p2-1]}"],shell=True)
    par contre je n'ai pas compris à quoi sert le f dans subprocess.run([f"xinput disable

    cordialement.

  10. #10
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 920
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par ptitjoz Voir le message
    [CODE]

    par contre je n'ai pas compris à quoi sert le f dans subprocess.run([f"xinput disable
    C'est pour signifier qu'on a affaire à une fstrings. C'est une façon de formater une chaine de caractère ...

  11. #11
    Membre confirmé
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    C'est pour signifier qu'on a affaire à une fstrings. C'est une façon de formater une chaine de caractère ...
    merci pour cette précision.
    Je mets le billet à résolu

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Avec xinput, çà semble(*) se faire plus simplement:
    disable-touchpad.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from xinput.operate_xinput_device import operate_xinput_device
    operate_xinput_device('0', 'TouchPad')
    enable-touchpad.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from xinput.operate_xinput_device import operate_xinput_device
    operate_xinput_device('1', 'TouchPad')
    (*) je n'ai pas testé.
    note: ça utilise aussi xinput via subprocess: si vous voulez vous améliorer, prenez le temps de regarder ce que fait le code.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 920
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    (*) je n'ai pas testé.
    note: ça utilise aussi xinput via subprocess: si vous voulez vous améliorer, prenez le temps de regarder ce que fait le code.
    - W
    J'ai testé et ça fonctionne comme attendu.
    Par contre ça utilise plutôt le module os (et les expressions rationnelles)...

  14. #14
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Par contre ça utilise plutôt le module os (et les expressions rationnelles)...
    Ah oui, c'est très Linux en fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    shell_response = os.popen(
                'xinput list | grep "{0}" --ignore-case'.format(str(device_name))
            ).read()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 920
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ah oui, c'est très Linux en fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    shell_response = os.popen(
                'xinput list | grep "{0}" --ignore-case'.format(str(device_name))
            ).read()
    - W
    Vu que os.popen() semble déprécié (pourquoi je n'en sais rien...) l'équivalent avec subprocess serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xin = subprocess.Popen(('xinput', 'list'), stdout=subprocess.PIPE)
    shell_response = subprocess.check_output(('grep', f'{device_name} --ignore-case'), stdin=xin.stdout)
    Ai-je juste?

  16. #16
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Ai-je juste?
    Si ça marche, c'est pas si faux...
    Reste que je ne vois pas pourquoi ne pas passer 'xinput list | grep "{0}" --ignore-case'.format(str(device_name) à subprocess.check_output (avec shell=True).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  17. #17
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 920
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si ça marche, c'est pas si faux...
    J'adore la formulation
    Je posais la question parce que je n'avais jamais essayé d'utiliser un pipe avec subprocess.
    Jusqu'à présent j'utilisais soit python, soit bash, mais rarement du pythonbash sauf rare cas où je ne trouve pas l'équivalent du programme.
    Pour: echo "truc" | grep -o "u" (exemple bidon mais testable)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import subprocess
    process = subprocess.Popen(['echo', 'truc'], stdout= subprocess.PIPE)
    result = subprocess.check_output(["grep", "-o" ,"u"],stdin=process.stdout,encoding='UTF-8')
    print(result)
    ça marche comme attendu

    Reste que je ne vois pas pourquoi ne pas passer xinput list | grep "{0}" --ignore-case'.format(str(device_name) à subprocess.check_output (avec shell=True).

    - W
    à vrai dire je ne vois pas comment écrire ça
    ?

  18. #18
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Il y a 2 "formes" pour utiliser Popen, la liste où la première entrée désigne le programme et les suivantes les paramètres, et la chaîne de caractères équivalente qu'on pourrait taper sous Bash.
    => Si j'envoie la chaîne de caractères 'xinput list | grep "{0}" --ignore-case'.format(str(device_name)) à un sous process qui a lancé bash, ça devrait le faire.
    note: shell=True est pré-requis lorsqu'on passe une chaîne de caractères au moins sur Linux. Côté Windows, la documentation dit que le CreateProcess n'accepte qu'une chaîne de caractères.

    Pour les détails voir la documentation (notamment côté "sécurité" avec shell=True).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  19. #19
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 920
    Billets dans le blog
    8
    Par défaut
    D'accord c'est entendu... j'approfondirais le sujet ultérieurement .

  20. #20
    Membre confirmé
    Homme Profil pro
    Sans
    Inscrit en
    Mai 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mai 2017
    Messages : 62
    Par défaut
    Merci pour vos recherches poussées qui, il faut bien l'avouer, dépassent quelques peu mes connaissances...
    Cependant je vais rester pragmatique et utiliser ce que je comprends le mieux et qui fonctionne.
    En tous cas merci de votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Touchpad désactivé dans Ubuntu 18.04
    Par sovo dans le forum Ubuntu
    Réponses: 0
    Dernier message: 08/10/2018, 15h55
  2. [BATCH] Désactivation Souris/Touchpad USB PC Fixe
    Par vlx360 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 28/07/2017, 17h34
  3. Désactiver bords touchpad
    Par ziad.shady dans le forum Windows 8
    Réponses: 1
    Dernier message: 16/05/2013, 00h14
  4. [XP] Désactiver le clic du touchpad sur MSI VR600
    Par Djakisback dans le forum Périphériques
    Réponses: 5
    Dernier message: 06/02/2008, 18h14
  5. Réponses: 8
    Dernier message: 17/05/2002, 09h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo