29 votes

Activer le partage de connexion USB à partir de la ligne de commande

Je voudrais activer le partage de connexion USB depuis un script bash.

J'ai trouvé le nom d'action TetherSettings depuis

aapt dump xmltree com.android.settings.apk AndroidManifest.xml | less +/ether

La commande suivante ouvre les paramètres nécessaires, mais ne change rien seule

am start -n com.android.settings/.TetherSettings

Y a-t-il une possibilité d'exécuter une commande avec adb shell pour le changer?


Lié, mais à l'opposé: Est-il possible de désactiver le partage de connexion USB depuis la ligne de commande?

0 votes

C'est vraiment cool. J'ai essayé de trouver d'autres commandes pour faire aapt dump xmltree com.android.settings.apk AndroidManifest.xml mais cela n'a pas fonctionné sur mon téléphone (aapt introuvable). Comment puis-je voir la liste des paramètres disponibles ?

0 votes

0 votes

Merci! J'ai trouvé aapt dans le dossier build-tools. Je peux le lancer maintenant. Je ne semble pas trouver com.android.settings.apk cependant. J'ai essayé: find / -name 'com.android.settings.apk' sur le téléphone, mais rien n'est apparu :( Pouvez-vous s'il vous plaît me dire où je peux trouver com.android.settings.apk ?

20voto

Léo Lam Points 303

En exécutant la commande suivante en tant que root, vous devriez activer le partage de connexion USB :

  • service call connectivity 32 i32 1 sur Ice Cream Sandwich (4.0)
  • service call connectivity 33 i32 1 sur Jelly Bean (4.1 à 4.3)
  • service call connectivity 34 i32 1 sur KitKat (4.4)
  • service call connectivity 30 i32 1 sur Lollipop (5.0)
  • service call connectivity 31 i32 1 sur Lollipop (5.1) selon une réponse de Firelord
  • service call connectivity 30 i32 1 sur Marshmallow (6.0), non testé
  • service call connectivity 41 i32 1 sur Samsung Marshmallow (6.0)
  • service call connectivity 33 i32 1 sur Nougat (7.0)
  • service call connectivity 39 i32 1 sur Samsung Nougat (7.0)

Le premier nombre que vous voyez dans les commandes est le numéro de la méthode setUsbTethering() dans IConnectivityManager.aidl (cela dépend de la version d'Android et n'existe pas sur Gingerbread).

(Conseil : pour vérifier ce fichier pour une version d'Android particulière, sélectionnez la branche appropriée.)

Donc, ce que cette commande fait, c'est appeler setUsbTethering() et transmettre soit 1 (pour activer le partage de connexion USB) soit 0 (pour le désactiver).

Pour plus d'informations, consultez cette question liée sur Stack Overflow.


Si vous activez le partage de connexion USB dans le cadre d'une configuration de partage de connexion USB inverse, setprop sys.usb.config rndis,adb devrait être suffisant pour configurer l'interface rndis0.

1 votes

En regardant la branche jb-release, int setUsbTethering (boolean enable); semble être la 33e méthode, et non la 34e. De plus, j'ai testé à la fois les commandes 4.1/4.2 et 4.3/4.4 sur un Nexus 7 avec JB 4.3 et le service d'appel connectivity 33 i32 1 active le partage de connexion.

0 votes

@JoshHolland doit avoir été une erreur. Merci de l'avoir corrigé!

0 votes

C'est la bonne réponse pour le partage de connexion USB. Cela ne fonctionnera pas pour le partage de connexion Wifi cependant. L'API n'a pas été laissée ouverte pour cela...

8voto

Rilwan Points 411

Il existe une méthode assez mauvaise en utilisant adb shell input tap, obtenir les coordonnées pour activer le partage de connexion et remplacer

adb shell input tap  

Ou naviguer pour activer la radio en utilisant adb shell input keyevent. Jetez simplement un œil à,

adb shell input 

Encore une fois, cela se limite à un appareil particulier.

0 votes

En combinant tout cela, cela fonctionne pour moi si l'écran est déverrouillé : adb shell "am start -n com.android.settings/.TetherSettings; input keyevent KEYCODE_DPAD_UP; input keyevent KEYCODE_ENTER". J'ai trouvé une liste d'événements clés sur SO.

1 votes

Au cas où quelqu'un voudrait tester ceci et/ou le modifier pour son appareil, je vais le poster ici. J'ai écrit un petit script pour activer le partage de connexion pour mon Nexus 5x (doit être déverrouillé) et je l'ai relié à udev pour le faire automatiquement lorsque je le branche.

1 votes

@redbmk - merci pour le script utile. Pour un Galaxy A5 2017 la séquence de touches est : ${inputKey}DPAD_DOWN; $pause; ${inputKey}DPAD_DOWN; $pause; ${inputKey}ENTER. De plus, j'ai constaté que pause="sleep 0.3" fonctionne bien.

8voto

user29787 Points 81

Essayez la commande setprop ci-dessous :

setprop sys.usb.config rndis,adb

5 votes

Il ne s'agit que d'une partie de ce qui est nécessaire. Cela ne démarrera pas dnsmasq par exemple.

8voto

Firelord Points 23064

Si votre version Android dispose de l'utilitaire intégré svc, exécutez cette commande :

adb shell svc usb setFunctions rndis

Cela activerait le partage de connexion USB. Pour voir quelles autres fonctions USB sont disponibles, exécutez :

adb shell svc usb

0 votes

setFunction dans la première commande

0 votes

@Jortstek dans la dernière version d'Android (version 12), cela continue d'être setFunctions. Voir android.googlesource.com/platform/frameworks/base/+/refs/hea‌​ds/… Il est possible que l'implémentation d'Android par le fabricant de votre appareil ait supprimé le s final du mot-clé.

1 votes

Wow. Android 8 sur un appareil Samsung, c'est certainement sans le "s". Les astuces qu'ils inventent pour embrouiller les gens.

4voto

Zibri Points 161

Il s'agit d'un appareil indépendant (bascules de partage de connexion USB)

adb shell am start -n com.android.settings/.TetherSettings &&
adb shell input keyevent 20 &&
adb shell input keyevent 20 &&
adb shell input keyevent KEYCODE_ENTER &&
sleep 2 &&
adb shell input keyevent 4

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X