Parece que sólo puedo obtener permisos ADB para mi dispositivo mientras está en modo MTP o PTP y NO en modo USB tethering, que es lo que necesito.
He investigado mucho pero me he topado con tanta información contradictoria y muy antigua que ya no veo cómo proceder.
Aquí dicen que no es posible, pero se remonta a 2012. Aquí y aquí Proponen invocar el shell vía ADB para poner el dispositivo en modo tethering USB (que a mí también me funciona) pero también para desactivarlo, lo que en mi caso falla ya que una vez salido del modo MTP o PTP ya no tengo permisos para mi dispositivo.
Entonces encontré este interesante post que parece relevante, pero no proporciona una solución completa. Este también parece relevante, pero no toca el caso del tethering.
Así que, de una vez por todas, ¿cómo puedo mantener los permisos de ADB para mi dispositivo cuando es NO en MTP o PTP ¿modo? Sólo me interesan las versiones recientes de Android. Obviamente tengo root acceso para mi dispositivo también la posibilidad de desplegar ROMs personalizadas, aunque, por gusto personal, suelo ceñirme a LineageOS.
Nota adicional: este es el error que me da cuando no está en MTP/PTP:
$ adb devices
List of devices attached
2d8568f6 no permissions; see [http://developer.android.com/tools/device.html]
$ adb shell
error: insufficient permissions for device
See [http://developer.android.com/tools/device.html] for more information
Lamentablemente el enlace es bastante inútil, pero parece que ADB identifica y se comunica con el dispositivo, pero este no acepta ninguna petición.
No creo que esto tenga que ver con mi PC, las reglas udev están en su lugar, además ADB funciona bien cuando el dispositivo está en modo MTP o PTP.
Aquí hay una captura de pantalla ( haga clic para ver el vídeo de ese menú ):
Cuando en el modo MTP puedo abrir un shell a través de ADB, esto es lo que veo:
$ su
# pwd
/
# ls -lah
total 1.0M
drwxr-xr-x 18 root root 4.0K 2008-12-31 19:30 .
drwxr-xr-x 18 root root 4.0K 2008-12-31 19:30 ..
dr-xr-xr-x 56 root root 0 1971-04-23 21:51 acct
lrw-r--r-- 1 root root 11 2008-12-31 19:30 bin -> /system/bin
lrw-r--r-- 1 root root 50 2008-12-31 19:30 bugreports -> /data/user_de/0/com.android.shell/files/bugreports
drwxrwx--- 6 system cache 4.0K 1971-04-23 21:51 cache
lrw-r--r-- 1 root root 13 2008-12-31 19:30 charger -> /sbin/charger
drwxr-xr-x 3 root root 0 1970-01-01 01:00 config
lrw-r--r-- 1 root root 17 2008-12-31 19:30 d -> /sys/kernel/debug
drwxrwx--x 42 system system 4.0K 2020-05-02 11:50 data
lrw------- 1 root root 23 2008-12-31 19:30 default.prop -> system/etc/prop.default
drwxr-xr-x 17 root root 3.4K 2018-03-20 08:10 dev
lrw-r--r-- 1 root root 11 2008-12-31 19:30 dsp -> /vendor/dsp
lrw-r--r-- 1 root root 11 2008-12-31 19:30 etc -> /system/etc
lrw-r--r-- 1 root root 20 2008-12-31 19:30 firmware -> /vendor/firmware_mnt
-rwxr-x--- 1 root shell 2.1M 2008-12-31 19:30 init
-rwxr-x--- 1 root shell 1.2K 2008-12-31 19:30 init.environ.rc
-rwxr-x--- 1 root shell 29K 2008-12-31 19:30 init.rc
-rwxr-x--- 1 root shell 7.5K 2008-12-31 19:30 init.usb.configfs.rc
-rwxr-x--- 1 root shell 5.5K 2008-12-31 19:30 init.usb.rc
-rwxr-x--- 1 root shell 511 2008-12-31 19:30 init.zygote32.rc
-rwxr-x--- 1 root shell 875 2008-12-31 19:30 init.zygote64_32.rc
drwx------ 2 root root 16K 2008-12-31 19:30 lost+found
drwxr-xr-x 12 root system 260 1971-04-23 21:51 mnt
drwxr-xr-x 2 root root 4.0K 2008-12-31 19:30 odm
drwxr-xr-x 2 root root 4.0K 2008-12-31 19:30 oem
dr-xr-xr-x 512 root root 0 1970-01-01 01:00 proc
lrw-r--r-- 1 root root 15 2008-12-31 19:30 product -> /system/product
drwxr-xr-x 3 root root 4.0K 2008-12-31 19:30 res
drwxr-xr-x 3 root root 300 1971-04-23 21:51 sbin
lrw-r--r-- 1 root root 21 2008-12-31 19:30 sdcard -> /storage/self/primary
drwxr-xr-x 4 root root 80 2020-02-27 08:07 storage
dr-xr-xr-x 12 root root 0 1971-04-23 21:51 sys
drwxr-xr-x 17 root root 4.0K 2018-03-20 02:40 system
-rw-r--r-- 1 root root 5.2K 2008-12-31 19:30 ueventd.rc
drwxr-xr-x 15 root root 4.0K 2008-12-31 19:30 vendor
-rw-r--r-- 1 root root 524 2008-12-31 19:30 verity_key
Puedo abrir los distintos .rc
archivos allí (con nano
o /sbin/.magisk/busybox/vi
) pero en modo de sólo lectura. Puede que consiga los permisos rw desde el recovery, pero aun así no sabría que cambiar.
0 votos
Eso parece ser un problema específico del dispositivo (-> edita tu pregunta y añade los detalles del dispositivo). Mi Sony XA2 funciona desde el principio con USB tethering y ADB al mismo tiempo (sin embargo, MTP parece estar desactivado mientras el USB tethering está activo).
0 votos
@Robert Estoy probando con un lenovo k6 (karate k33a48). Tengo la sensación de que en el pasado solía funcionar, pero no recuerdo qué ROM utilizaba. Supongo que será un problema de software, posiblemente no relacionado con el dispositivo.
1 votos
Nota: Su pregunta es un poco engañosa ya que siempre habla de "permiso adb". Sin embargo esto no es un problema de permisos sino de configuración de la interfaz USB. Cada dispositivo USB físico puede tener varios dispositivos lógicos activos al mismo tiempo (en mi dispositivo uno para "NDIS remoto" y otro para adb o uno para adb y otro para MTP). En Windows puedes verlos bien en el administrador de dispositivos agrupados por un dispositivo compuesto USB (dispositivo virtual que combina los dispositivos lógicos USB). De ahí que tu pregunta sea cómo activar RNDIS y adb al mismo tiempo.
0 votos
Deberías añadir esta información tan importante en tu pregunta y no esconderla en los comentarios. Sin embargo, no creo que sea un problema de permisos. El permiso de adb utiliza una clave pública de autentificación, por lo que el permiso no puede cambiar sin más. Sospecho que se trata de un error en el firmware de tu dispositivo o un error general si otros pueden reproducir tu problema.
0 votos
@Robert Voy a probar con otra rom, pero es una pena porque así no se entiende el problema.
0 votos
Si su dispositivo está rooteado y utiliza
sysfs
para configurar las funciones del USB, puede editarinit
's.rc
archivos para escribiradb
yrndis
al mismo tiempo (como escribeadb
ymtp
juntos). Lo mismo debería ser posible si su dispositivo utilizaconfigfs
interfaces. // Si el problema es sólo sobre los permisos de ADB (y no que el tethering y el ADB no puedan ser activados simultáneamente), todo lo que necesitas hacer es añadir el VID/PID del USB a tu administrador de dispositivos (por ejemploudevd
) en el PC para que se establezcan los permisos adecuados en las interfaces USB en/dev
. No hay nada que hacer por teléfono.0 votos
¿Responde esto a su pregunta? Obteniendo "???" y sin permisos al usar 'adb devices' en Linux
0 votos
@IrfanLatif en realidad no. Mi regla udev está en su lugar y funciona bien cuando en el modo MTP/PTP. La respuesta que sugiere cambiar el modo usb es bastante tonta en mi caso. Ver las ediciones para el
.rc
archivos.0 votos
MTP/PTP utiliza un VID/PID USB diferente, normalmente el proporcionado por Google en AOSP. Tethering (RNDIS) es un modo USB específico del hardware, por lo que el VID/PID del OEM está expuesto al PC. La mayoría de las distros Linux reconocen MTP/PTP de forma inmediata porque es un caso genérico. Pero hay una larga lista de proveedores de teléfonos Android, por lo que no todas las distribuciones de Linux reconocen cada proveedor (VID) y cada uno de sus productos (PID). Te sugiero que leas cómo funciona el VID/PID del USB, en lugar de resistirte ciegamente.
0 votos
@IrfanLatif Gracias por tu insistencia. Efectivamente era así: el ID del producto cambiaba ligeramente cuando estaba en modo tethering y no tenía la regla udev adecuada. He trasladado este conocimiento en la wiki de archlinux: wiki.archlinux.org/index.php/ Si haces que tu comentario sea una respuesta estaré encantado de aceptarlo y upvotearlo :D
1 votos
@DarioP Me alegro de que te haya servido de ayuda. Creo que la pregunta que he enlazado ya incluye las respuestas pertinentes. No se fomenta el reenvío.
0 votos
Vamos a continuar esta discusión en el chat .
0 votos
Esta es la respuesta a mi pregunta: Android.stackexchange.com/a/195443/322110