20 votes

Comment trouver le nom/ID de l'utilisateur en cours d'exécution à partir d'ADB ?

J'ai une Nexus 7 avec plusieurs utilisateurs. J'essaie de trouver quel est l'utilisateur en cours d'exécution en utilisant ADB. Le mieux que j'ai pu obtenir jusqu'à présent était de vérifier le lien du répertoire hérité qui est soit lié à /mnt/shell/emulated/0 ou à /mnt/shell/emulated/1 .

Existe-t-il un moyen plus efficace de savoir quel est l'utilisateur en cours d'exécution ? Existe-t-il également un moyen de connaître le nom de l'utilisateur actuel ?

32voto

Firelord Points 23064

Pour Android 8, 9, 10, et peut-être pour Nougat aussi je suppose, exécutez :

adb shell am get-current-user                # returns USER_ID of the foreground user
adb shell cmd activity get-current-user      # alternative command 

Sinon, faites :

adb shell 'dumpsys activity | grep mCurrentUser'

Votre sortie serait :

mCurrentUser=0

0 est toujours l'identifiant du propriétaire (utilisateur principal). Tout autre numéro, par exemple 10 ou 11, correspond à un utilisateur secondaire (y compris l'utilisateur invité).

Pour Lollipop, entrez la commande :

adb shell dumpsys user

Vous obtiendriez quelque chose comme :

Users:
  UserInfo{0:Owner\_lol:13} serialNo=0
    Created: 
    Last logged in: +1m40s308ms ago
  UserInfo{10:New user:10} serialNo=13
    Created: +1h1m15s438ms ago
    Last logged in: +6m2s390ms ago

Sur {0:Owner_lol:13} 0 est l'ID utilisateur de l'utilisateur ayant le nom d'utilisateur Owner_lol .

Pour chaque utilisateur, vous verrez Last logged in: temps. L'entrée dont l'heure est la plus proche de l'heure actuelle implique que l'utilisateur correspondant est actuellement en focus sur l'écran.

Étant donné que vous avez l'accès Root, vous pouvez voir tous ces détails à partir de l'onglet XML de chacun des utilisateurs disponibles sous /data/system/users .

C'est une autre question que mon Android 4.2.1 n'a pas donné Last Logged in: le temps correctement.


Alternativement, dans Lollipop, vous pouvez le faire :

adb shell pm list users

Vous obtiendriez quelque chose comme :

Users:
        UserInfo{0:Owner\_lol:13} running
        UserInfo{10:New user:10} 

Dans mon Android 4.2.1, je ne vois pas le texte "running", peut-être parce qu'il n'a pas été implémenté dans le code ou parce que l'appareil est mono-utilisateur.

Nota que si plusieurs utilisateurs sont connectés, vous verrez "running" pour tous les utilisateurs connectés.


user ( android.os.IUserManager ) est le service qui gère les utilisateurs dans le système. dumspsys a simplement vidé la sortie demandée au service user .

Vous pouvez alternativement interroger le service à condition de savoir quelle fonction interroger. Par exemple, dans mon Android 5.0.2, je peux entrer :

adb shell service call user 8

Cela me donne un fichier hexadécimal où je peux au moins voir le nom d'utilisateur et l'ID utilisateur, entre autres choses, de tous les utilisateurs du système.

Numéro 8 appelle une fonction particulière. Voir le code source de android.os.IUserManager pour votre version Android aquí .

Editar :

Une autre méthode consiste à jeter un coup d'œil dans le activity service.

adb shell dumpsys activity

Cherchez les quelques lignes après la ligne avec le texte mStartedUsers: . Vous verriez quelque chose comme :

User #0: mState=RUNNING
User #10: mState=RUNNING

L'entrée numérique entre # y : est l'ID utilisateur d'un utilisateur.

3voto

Forivin Points 317

J'ai essayé tout ce que Firelord a suggéré, mais rien de tout cela n'a donné de résultats utiles. Il dit toujours que tous les utilisateurs sont "EN COURS D'EXECUTION", "Dernière connexion" ne se met pas à jour/se réinitialise quand on change de compte utilisateur...

Je me suis retrouvé avec ça :

adb shell dumpsys activity | grep -E "mUserLru" | grep -Eo "[0-9]+\]$" | tr -d "]"

Renvoie l'identifiant de l'utilisateur actif.

Cela fonctionne très bien pour moi.

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