কমান্ড লাইন থেকে "ইউএসবি টিথারিং" অ্যান্ড্রয়েড সেটিংটি সক্রিয় করা কি সম্ভব?


23

আমি ব্যাশ স্ক্রিপ্টের মধ্যে থেকে "ইউএসবি টিথারিং" সক্রিয় করতে চাই, সুতরাং adb shellকিছু অ্যান্ড্রয়েড সেটিংস পরিবর্তন করার সাথে একটি কমান্ড লাইন চালানোর কোনও সম্ভাবনা আছে কি?

সম্পাদনা 1 :

নিম্নলিখিত কমান্ডটি প্রয়োজনীয় সেটিংসটি খুলুন তবে একা কিছু পরিবর্তন করবেন না:

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

আমি টিথারসেটেটিংয়ের ক্রিয়া নামটি পেয়েছি

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

ওটা সত্যিই ভালো. আমি অন্যান্য কমান্ডগুলি করার চেষ্টা করেছিলাম aapt dump xmltree com.android.settings.apk AndroidManifest.xmlকিন্তু এটি আমার ফোনে কার্যকর হয়নি (অপ্টটি পাওয়া যায় নি)। উপলব্ধ সেটিংসের একটি তালিকা আমি কীভাবে দেখতে পারি?
জর্জ প্রোফেনজা


ধন্যবাদ! আমি বিল্ড-টুলস ফোল্ডারে সেরাটি পেয়েছি। আমি এখন এটি চালাতে পারেন। যদিও আমি com.android.settings.apk খুঁজে পাচ্ছি না। আমি চেষ্টা করেছি: find / -name 'com.android.settings.apk'ফোনে, কিন্তু কিছুই আসেনি :( আপনি দয়া করে আমাকে জানতে পারেন যে আমি com.android.settings.apk কোথায়
পাব

উত্তর:


14

রুট হিসাবে নিম্নলিখিত কমান্ড চালনা করা উচিত ইউএসবি টিথারিং সক্ষম করে:

  • service call connectivity 32 i32 1 আইসক্রিম স্যান্ডউইচ এ (4.0)
  • service call connectivity 33 i32 1 জেলি বিন তে (4.1 থেকে 4.3)
  • service call connectivity 34 i32 1 KitKat এ (4.4)
  • service call connectivity 30 i32 1 ললিপপে (5.0)
  • service call connectivity 31 i32 1Lollipop (এবং 5.1) এ অনুযায়ী একটি উত্তর দ্বারা Firelord
  • service call connectivity 30 i32 1মার্শমেলোতে (6.0), অনির্ধারিত
  • service call connectivity 41 i32 1 স্যামসং মার্শমেলোতে (6.0)
  • service call connectivity 33 i32 1 নওগতে (.0.০)
  • service call connectivity 39 i32 1 স্যামসুং নুগাটে (7.0)

কমান্ডগুলিতে আপনি যে প্রথম নম্বরটি দেখছেন তা হ'ল setUsbTethering()পদ্ধতিটির নম্বর IConnectivityManager.aidl(এটি অ্যান্ড্রয়েড সংস্করণে নির্ভর করে এবং জিঞ্জারব্রেডে বিদ্যমান নেই)।

(টিপ: একটি নির্দিষ্ট অ্যান্ড্রয়েড সংস্করণের জন্য এই ফাইলটি পরীক্ষা করতে, উপযুক্ত শাখাটি নির্বাচন করুন))

সুতরাং এই আদেশটি যা করবে তা কল setUsbTethering()এবং 1 টি (ইউএসবি টিথারিং সক্ষম করুন) বা 0 (এটি অক্ষম করতে) পাস করুন।

আরও তথ্যের জন্য, স্ট্যাক ওভারফ্লোতে এই সম্পর্কিত প্রশ্নটি দেখুন ।


আপনি যদি ইউএসবি বিপরীত টিথারিং সেটআপের অংশ হিসাবে ইউএসবি টিথারিং সক্ষম করে থাকেন setprop sys.usb.config rndis,adbতবে rndis0ইন্টারফেসটি সেট আপ করার জন্য পর্যাপ্ত পরিমাণে হওয়া উচিত ।


1
জেবি-রিলিজ শাখার দিকে তাকিয়ে, int setUsbTethering (বুলিয়ান সক্ষম); 34 তম নয়, 33 তম পদ্ধতি বলে মনে হচ্ছে। এছাড়াও, আমি জেবি 4.3 এবং পরিষেবা কল সংযোগ 33 আই 32 1 টিথারিং চালু করে একটি নেক্সাস 7 এ 4.1 / 4.2 এবং 4.3 / 4.4 উভয় কমান্ড পরীক্ষা করেছি ।

@ জোশহোল্যান্ড অবশ্যই ভুল হয়েছে been এটি ঠিক করার জন্য ধন্যবাদ!
লায়ো লাম

এটি ইউএসবিথেরিংয়ের সঠিক উত্তর। এটি যদিও ওয়াইফাইথেরিংয়ের পক্ষে কাজ করবে না। API এর জন্য খোলা রাখা হয়নি ...
ক্রিস্টোফার

অবশ্যই আমি আপত্তি করব না;) লিঙ্কটির জন্য ধন্যবাদ।
লায়ো লাম

1
CM14.1 উপর (7.1) জেলি বিন কমান্ড কাজ করে
Christoph

7

এখানে বেশ খারাপ পদ্ধতি ব্যবহার করা হচ্ছে adb shell input tap, টিথারিং এবং বিকল্প সক্ষম করার জন্য স্থানাঙ্কগুলি পান

adb shell input tap <x> <y>

অথবা রেডিও ব্যবহার করে সক্ষম করতে নেভিগেট করুন adb shell input keyevent। শুধু একবার দেখুন,

adb shell input 

আবার এটি একটি নির্দিষ্ট ডিভাইসে সীমাবদ্ধ।


এই সব একসাথে মিশ্রন, এই আমার জন্য কাজ করে পর্দা আনলক করা আছে যদি: adb shell "am start -n com.android.settings/.TetherSettings; input keyevent KEYCODE_DPAD_UP; input keyevent KEYCODE_ENTER"। আমি এসও-তে মূল ইভেন্টগুলির একটি তালিকা পেয়েছি ।
redbmk

1
কেউ যদি এটি পরীক্ষা করে এবং / বা তাদের ডিভাইসের জন্য এটি পরিবর্তন করতে চায় তবে আমি এটি এখানে পোস্ট করব। আমি আমার নেক্সাস 5x (আনলক করা দরকার) এর জন্য টিথারিং চালু করার জন্য একটি ছোট স্ক্রিপ্ট লিখেছিলাম এবং যখন আমি এটি প্লাগ ইন করি তখন স্বয়ংক্রিয়ভাবে এটি করার জন্য
উদেবকে

1
@redbmk - দরকারী স্ক্রিপ্ট জন্য ধন্যবাদ। একটি জন্য আকাশগঙ্গা A5 2017 কী অনুক্রম হল: $ {inputKey} DPAD_DOWN; বিরতি $; $ {inputKey} DPAD_DOWN; বিরতি $; । {ইনপুটকি} ENTER । এছাড়াও আমি দেখতে পেয়েছি যে বিরতি = "ঘুম 0.3" ঠিক আছে works
পি। উইন্ড্রিজে

উপরের ক্রমটিতে আমি এমটিপি সক্ষম করার বিষয়ে পপ আপ নিশ্চিতকরণটি খারিজ করার জন্য প্রাথমিক কী টিপগুলি ভুলে গিয়েছিলাম, যা {K ইনপুটকি} ডিপিএডি_ডাউন; বিরতি $; $ {inputKey} DPAD_DOWN; বিরতি $; $ {inputKey} ENTER;
পি। উইন্ড্রিজ

6

setpropনীচে কমান্ড চেষ্টা করুন :

setprop sys.usb.config rndis,adb

2
এটি যা প্রয়োজন কেবল তারই একটি অংশ। এটি উদাহরণস্বরূপ dnsmasq শুরু করবে না।
ক্রুট

2

প্রথমে ঘুমের পরিবর্তে উইন্ডোজ টাইমআউট কমান্ডটি ব্যবহার করতে সংশোধন করা হয়েছে, স্ক্রিনটি জাগ্রত করুন এবং কেবল একবার নীচে চাপুন। আমার ফোনে দু'বার নিচে সক্ষম ওয়াইফাই টিথারিং।

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

1

serviceপদ্ধতি আমার স্যামসাং ডিভাইসে আমার জন্য কাজ করে নি। যদিও আমি সরাসরি নেটওয়ার্ক ইন্টারফেসটি কনফিগার করে এটি কীভাবে করব তা আবিষ্কার করেছি। এখানে একটি স্ক্রিপ্ট যা ইউএসবি টিথারিংয়ের জন্য একটি লিনাক্স মেশিন এবং একটি ইউএসবি সংযুক্ত রুট অ্যান্ড্রয়েড ডিভাইস সেট আপ করে। এটি ডিএনএস বা NAT মাস্ক্রেডিং সেটআপ করে না, তবে 192.168.42.129 এ ডিভাইসটি অ্যাক্সেসযোগ্য করার জন্য যথেষ্ট:

#!/bin/bash
set -euo pipefail

# Set up USB tethering for an Android device.
# Usage: adb-usb-tether [USB-VENDOR USB-PRODUCT]
# If USB vendor/product is unspecified, use first USB network interface.
# On the Android side, tethering is enabled 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 "Found interface: $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 "Requesting interface:" 1>&2
    adb_su setprop sys.usb.config rndis,adb
    echo " >> OK" 1>&2
fi

while [[ -z "$if" ]]
do
    echo "Waiting for network device..." 1>&2
    sleep 1
    if=$(find_if)
done

while ! ( ip link | grep -qF "$if" )
do
    echo "Waiting for interface..." 1>&2
    sleep 1
done

function configure_net() {
    local name="$1"
    local if="$2"
    local ip="$3"
    local table="$4"
    local cmdq="$5" # Query command
    local cmdx="$6" # Configuration command

    if ! ( "$cmdq" ip addr show dev "$if" | grep -qF 192.168.42."$ip" )
    then
        echo "Configuring $name interface address:" 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 "Bringing $name interface up:" 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 "Configuring $name route:" 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

ফরওয়ার্ডিং সক্ষম করতে (যেমন অ্যান্ড্রয়েড ডিভাইসের মাধ্যমে পিসি থেকে ইন্টারনেটের সাথে সংযুক্ত), আমার প্রশ্ন এবং উত্তরটি এখানে দেখুন


0

এটি ডিভাইসটি স্বতন্ত্র (ইউএসবি টিথারিংকে টগল করে)

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.