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 ?

3voto

La méthode service n'a pas fonctionné pour moi sur mon appareil Samsung. J'ai trouvé comment le faire en configurant directement l'interface réseau. Voici un script qui configure une machine Linux et un appareil Android rooté connecté en USB pour le partage de connexion USB. Cela ne configure pas les DNS ou le masquage NAT, mais suffit pour rendre l'appareil accessible à 192.168.42.129 :

#!/bin/bash
set -euo pipefail

# Configurer le partage de connexion USB pour un appareil Android.
# Utilisation : adb-usb-tether [VENDOR USB-PRODUCT]
# Si le vendeur/produit USB n'est pas spécifié, utilisez la première interface réseau USB.
# Côté Android, le partage est activé via adb shell.

if [[ $# -eq 2 ]]
then
    any=false
    vendor=$1
    product=$2
else
    any=true
fi

function find_if() {
    local path if
    for path in /sys/class/net/*
    do
        if=$(basename "$path")
        if [[ "$(readlink "$path")" == */usb* ]]
        then
            local ifproduct ifvendor
            ifproduct=$(cat "$(realpath "$path")/../../../idProduct")
            ifvendor=$(cat "$(realpath "$path")/../../../idVendor")
            if $any || [[ "$ifproduct" == "$product" && "$ifvendor" == "$vendor" ]]
            then
                echo "Interface trouvée : $if" 1>&2
                echo "$if"
                return
            fi
        fi
    done
}

function adb_shell() {
    adb shell "$(printf " %q" "$@")"
}

function adb_su() {
    local quoted
    quoted="$(printf " %q" "$@")"
    adb shell su -c "$(printf %q "$quoted")"
}

if=$(find_if)
if [[ -z "$if" ]]
then
    echo "Demande d'interface :" 1>&2
    adb_su setprop sys.usb.config rndis,adb
    echo " >> OK" 1>&2
fi

while [[ -z "$if" ]]
do
    echo "En attente d'un périphérique réseau..." 1>&2
    sleep 1
    if=$(find_if)
done

while ! ( ip link | grep -qF "$if" )
do
    echo "En attente de l'interface..." 1>&2
    sleep 1
done

function configure_net() {
    local name="$1"
    local if="$2"
    local ip="$3"
    local table="$4"
    local cmdq="$5" # Commande de requête
    local cmdx="$6" # Commande de configuration

    if ! ( "$cmdq" ip addr show dev "$if" | grep -qF 192.168.42."$ip" )
    then
        echo "Configuration de l'adresse de l'interface $name :" 1>&2
        "$cmdx" ip addr add 192.168.42."$ip"/24 dev "$if"
        echo " >> OK" 1>&2
    fi

    if ( "$cmdq" ip addr show dev "$if" | grep -qF 'state DOWN' )
    then
        echo "Activation de l'interface $name :" 1>&2
        "$cmdx" ip link set dev "$if" up
        sleep 1
        echo " >> OK" 1>&2
    fi

    if ! ( "$cmdq" ip route show table "$table" | grep -qF "192.168.42.0/24 dev $if" )
    then
        echo "Configuration de la route pour $name :" 1>&2
        "$cmdx" ip route add table "$table" 192.168.42.0/24 dev "$if"
        echo " >> OK" 1>&2
    fi
}

configure_net local  "$if"   128 main  command   sudo
configure_net device rndis0  129 local adb_shell adb_su

Pour activer le transfert (c'est-à-dire se connecter à Internet depuis le PC via l'appareil Android), voir ma question et réponse ici.

3voto

idkaaa Points 31

Modifié pour utiliser la commande de temporisation de Windows au lieu de sleep, réveiller l'écran d'abord, et appuyer une seule fois vers le bas. Appuyer deux fois vers le bas active le partage de connexion wifi sur mon téléphone.

adb shell input keyevent KEYCODE_WAKEUP && adb shell am start -n com.android.settings/.TetherSettings && adb shell input keyevent KEYCODE_DPAD_DOWN && adb shell input keyevent KEYCODE_ENTER && timeout 2 && adb shell input keyevent KEYCODE_BACK

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