是否可以从命令行激活“USB系列”Android设置? -- settings 领域 和 adb 领域 和 shell 领域 和 command-line 领域 和 bash 领域 android 相关 的问题

Is it possible to activate the “USB Tethering” Android setting from the command line?


简体版||繁體版
24
vote

问题

中文

我想在Bash脚本中激活"USB系列" ,因此有可能使用 adb shell 来运行命令行以更改一些Android设置?

edit1

以下命令打开所需的设置,但不单独更改任何内容:

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

我发现

tethersettings 动作名称
  aapt dump xmltree com.android.settings.apk AndroidManifest.xml | less +/ether   

相关,但相对的它是它可以从命令行禁用USB系列?

英文原文

I would like to activate "USB tethering" from within a bash script, so is there any possibility to run a command line with adb shell to change some Android settings ?

Edit1:

The following command open the needed settings but don't change anything alone :

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

I've found TetherSettings action name from

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

Related, but the opposite Is it possible to disable USB tethering from command line?

              
   
   

回答列表

1
 
vote
vote
最佳答案
 

如果您的android版本 svc 内置实用程序,请运行此命令:

  adb shell svc usb setFunctions rndis   

这将使USB系列能够实现。要查看其他USB功能可用,请执行以下操作:

  adb shell svc usb   
 

If your Android version has svc inbuilt utility, run this command:

adb shell svc usb setFunctions rndis 

This would enable USB tethering. To see what other USB functions are available, run:

adb shell svc usb 
 
 
17
 
vote

以root运行以下命令应启用USB系列:

  • service call connectivity 32 i32 1 在冰淇淋夹层上(4.0)
  • service call connectivity 33 i32 1 在果冻bean上(4.1到4.3)
  • service call connectivity 34 i32 1 在kitkat(4.4)
  • service call connectivity 30 i32 1 在lollipop(5.0)
  • service call connectivity 31 i32 1 在lollipop(5.1)上根据一个答案
  • service call connectivity 30 i32 1 在marshmallow(6.0)上,未经测试
  • service call connectivity 41 i32 1 在三星棉花糖(6.0)
  • service call connectivity 33 i32 1 在nougat(7.0)
  • service call connectivity 39 i32 1 在三星nougat(7.0)

在命令中看到的第一个数字是 setUsbTethering() 方法在 service call connectivity 33 i32 10 (这取决于android版本,不存在于gingerbread上)。

(提示:要检查此文件是否有特定的Android版本,请选择相应的分支。)

所以这个命令所做的是呼叫 service call connectivity 33 i32 11 并通过1(启用USB系列)或0(禁用它)。

有关详细信息,请参阅关于堆栈溢出的相关问题。


如果您将USB系列作为USB反向系数设置的一部分, service call connectivity 33 i32 12 应该超过 service call connectivity 33 i32 13 接口设置。

 

Running the following command as root should enable USB tethering:

  • service call connectivity 32 i32 1 on Ice Cream Sandwich (4.0)
  • service call connectivity 33 i32 1 on Jelly Bean (4.1 to 4.3)
  • service call connectivity 34 i32 1 on KitKat (4.4)
  • service call connectivity 30 i32 1 on Lollipop (5.0)
  • service call connectivity 31 i32 1 on Lollipop (5.1) according to an answer by Firelord
  • service call connectivity 30 i32 1 on Marshmallow (6.0), untested
  • service call connectivity 41 i32 1 on Samsung Marshmallow (6.0)
  • service call connectivity 33 i32 1 on Nougat (7.0)
  • service call connectivity 39 i32 1 on Samsung Nougat (7.0)

The first number you see in the commands is the setUsbTethering() method's number in IConnectivityManager.aidl (this depends on the Android version and doesn't exist on Gingerbread).

(Tip: to check this file for a particular Android version, select the appropriate branch.)

So what this command does is call setUsbTethering() and pass either 1 (enable USB tethering) or 0 (to disable it).

For more information, see this related question on Stack Overflow.


If you're enabling USB tethering as part of a USB reverse tethering setup, setprop sys.usb.config rndis,adb should be more than enough to get the rndis0 interface set up.

 
 
         
         
7
 
vote

使用 service call connectivity 33 i32 14 使用 abcdefghijklmn14,获取坐标以使能系列和替换为

  service call connectivity 33 i32 15  

或使用 service call connectivity 33 i32 16 导航以启用无线电。只是看看,

  service call connectivity 33 i32 17  

再次限制了特定的设备。

 

There is a pretty bad method using adb shell input tap, Get the coordinates for enable tethering and substitute

adb shell input tap <x> <y> 

Or navigate to enable radio using adb shell input keyevent. Just have a look at,

adb shell input  

Again this confines to a particular device.

 
 
       
       
6
 
vote

尝试 service call connectivity 33 i32 18 命令下面:

  service call connectivity 33 i32 19  
 

Try the setprop command below:

setprop sys.usb.config rndis,adb 
 
 
 
 
2
 
vote

修改以使用Windows Timeout命令而不是睡眠,唤醒屏幕,只需按下一次。在手机上启用了两次WiFi系列。

  service call connectivity 34 i32 10  
 

Modified to use windows timeout command instead of sleep, wake screen first, and only press down once. Twice down enabled wifi tethering on my 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 
 
 
1
 
vote

service call connectivity 34 i32 11 方法在我的三星设备上不适用于我。但是,我认为如何通过直接配置网络接口来完成它。以下是一个脚本,可以为USB系列设置Linux机器和USB连接的rooted Android设备。这不会设置DNS或NAT伪装,但足以使设备在192.168.42.129中可访问:

  service call connectivity 34 i32 12  

要启用转发(即通过Android设备从PC连接到Internet),请参阅我的问题并在这里回答。

 

The service method did not work for me on my Samsung device. I figured out how to do it by configuring the network interface directly, though. Here is a script that sets up a Linux machine and a USB-connected rooted Android device for USB tethering. This does not set up DNS or NAT masquerading, but is sufficient to make the device accessible at 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 

To enable forwarding (i.e. connect to the Internet from the PC via the Android device), see my question and answer here.

 
 
1
 
vote

这是设备独立的(切换USB系列)

  service call connectivity 34 i32 13  
 

this is device independent (toggles USB tethering)

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 
 
 

相关问题

4  是否可以通过Bash启动FTP会话?  ( Is it possible to start an ftp session via bash ) 
是否可以通过BASH Shell与Android Samsung Galaxy Smartphone开始会话以远程访问文件? ...

0  AddOn.d Bash脚本用于在夜间刷新Android 5.1 cm12.1之后删除apks .1不起作用  ( Addon d bash script for removing apks after nightly reflash on android 5 1 cm12 ) 
我正在尝试在/system/addon.d/中使用bash脚本,从夜间Android 5.1(cm12.1)安装中,删除不需要的apks。每一个新的夜间reshash都会重新安装某些系统应用程序,以便为什么我想要脚本来反转此操作,因此我不必手动进行。 有一些备份脚本运行罚款(su,gapps),但我自己的脚本不起作用...

1  平板电脑的Bash终端  ( Bash terminal on tablets ) 
我想购买一款平板电脑并使用它作为上网本,使用键盘码头工作(我仍然喜欢购买上网本的触摸屏和触摸箱选项)。我主要在Linux机器上工作,我需要SSH,VPN和远程打开X Windows的能力。是否有能够做到这一点的Android平板电脑的终端?任何关于ubuntu在平板电脑上的人? ...

11  如何将bash设置为默认shell?  ( How to set bash as default shell ) 
当我adb与cyanogenmod中的设备时,我用漂亮的bash shell,颜色提示和bashrc呈现。我没有从/ system / xbin / bash到/ system / bin / sh的符号链接。它们如何将默认shell设置为bash而不是sh?我看过rc文件,但没有找到任何东西。我想在我的Androi...

0  从文件名更改文件(图片,视频)时间戳  ( Change file pictures videos timestamp from filename ) 
当周围移动不同的文件和跨pc /智能手机时,最后修改日期的时间戳通常会重置为移动/复制操作的非常日期。这导致文件在某些​​应用程序(画廊)中是非按时间顺序排序的,特别是尤其适用于图像和视频。 通常,这些文件遵循img_yyyyyymmmd_hhmmss.jpg的命名约定,用于图像和vid_yyyyymmdd_hhmm...

8  从终端仿真器运行应用程序[已关闭]  ( Running applications from a terminal emulator ) 
关闭。这个问题是 off-topic 。它目前不接受答案。 想要改进这个问题?更新这个问题,所以它是关于android爱好者堆栈交换的主题。 关闭 ...

1  在Android平板电脑上的Bash-shell(变压器垫TF701T)  ( Bash shell on android tablet transformer pad tf701t ) 
是否有任何方法可以将Android与终端仿真器一起获得完全工作的Bash Shell,该终端仿真器支持硬件键盘(德国布局)? 我至少需要的功能(终端应用程序,不是图形!): Bash使用正常的.bashrc和脚本(函数定义,别名...) ssh-client with hostname查找和执行一些scp su...

5  Bash - 如何检查计算机是否存在于没有IP的网络上的计算机(即仅通过设备名称)?  ( Bash how can i check if a computer exists on my network without ip i e by de ) 
如果我的手机与我的笔记本电脑相同的WiFi网络,我希望通过Tasker执行某些Shell脚本。我的初始想法是编辑 /etc/hosts 文件,但这将无法起作用,因为设备只在一个wifi网络上仅受到一个wifi网络。 更昂贵的想法是只需从手机中对网络上的每一个可能的地址都是ping,然后尝试通过ssh发送命令(例如, ...

1  如何在Cyanogenmod中修改Bash Shell提示符?  ( How to modify bash shell prompt in cyanogenmod ) 
有没有任何成功修改壳体在cyanogenmod?目前,#是非常无用的,至少显示工作目录会很好。此外,是否可以完成Tab-Taskion? ...

24  是否可以从命令行激活“USB系列”Android设置?  ( Is it possible to activate the usb tethering android setting from the command ) 
我想在Bash脚本中激活"USB系列" ,因此有可能使用 adb shell 来运行命令行以更改一些Android设置? edit1 : 以下命令打开所需的设置,但不单独更改任何内容: am start -n com.android.settings/.TetherSettings 我发现的 tethe...




© 2022 it.wenda123.org All Rights Reserved. 问答之家 版权所有