Résumé :
getprop net.hostname
(Nom d'hôte système Android, probablement de type android_24412414)
echo $HOSTNAME
(nom d'hôte shell/terminal/env, probablement ro.product.device depuis build.prop)
cat /proc/sys/kernel/hostname
(Nom d'hôte système Linux, probablement localhost)
head /etc/hosts
(Nom d'hôte système Linux, probablement localhost)
hostname
(Commande pas toujours installée, si installée via busy box, elle lira /proc/sys/kernel/hostname)
Dépend de la version d'Android que vous avez.
Android 4.0 et supérieur
Les versions récentes utiliseront la bonne entrée de build.prop
. En d'autres termes, Android lit le build.prop
lors de son processus de démarrage normal. Une fois que le service de connectivité est en cours d'exécution, il vérifie si net.hostname est défini dans les paramètres, puis si c'est vide, alors il utilise l'ID Android "android_" + (ID Android permanent). Donc c'est tout ce que vous avez à faire.
Ajoutez net.hostname=HOSTNAMEICI
à /system/build.prop
(Un accès root peut être nécessaire). Laissez une ligne vide à la fin du fichier.
ConnectivityService.java de Kitkat, remarquez l'instruction IF isEmpty:
// configuration de notre nom de périphérique unique
if (TextUtils.isEmpty(SystemProperties.get("net.hostname"))) {
String id = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
if (id != null && id.length() > 0) {
String name = new String("android-").concat(id);
SystemProperties.set("net.hostname", name);
Android 2.3 et inférieur
Les anciennes versions, Gingerbread, Froyo, etc., écrasent simplement cela. Elles ne prennent pas la peine de vérifier. Elles définiront net.hostname sur android_24412414... quoi qu'il en soit. Vous devrez donc le changer après que le service de connectivité ait fini de se charger. Heureusement, il ne s'exécute qu'une fois au démarrage, pas à chaque nouvelle connexion. Il suffit donc d'exécuter setprop net.hostname NOMHOTEICI
après cela pour que cela reste. Malheureusement, cela se produit assez tard dans le processus de démarrage, vous avez donc besoin de quelque chose qui apportera les modifications une fois le démarrage terminé. Très probablement une application qui s'exécute seule.
ConnectivityService.java de Froyo:
// configuration de notre nom de périphérique unique
String id = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
if (id != null && id.length() > 0) {
String name = new String("android_").concat(id);
SystemProperties.set("net.hostname", name);
Mais alors il y a un autre problème.
Le paramètre net.hostname n'est pas copié sur l'ensemble du système ! Si vous utilisez une application console/terminal, vous pourriez ne pas obtenir le même nom d'hôte. Mon téléphone, un Samsung Sidekick 4G (basé sur semi-Galaxy S) a un init.rc qui exécute hostname localhost
, donc toutes les commandes en dessous ne verront pas non plus votre nom d'hôte build.prop ou le nom d'hôte android_id ! Vous devez donc également le définir.
hostname NOMHOTEICI
ou echo NOMHOTEICI > /proc/sys/kernel/hostname
Remarque : Selon la manière dont vous le faites, vous devrez exécuter la commande ci-dessus en tant que root pour que cela fonctionne. Init.rc se trouve généralement sur la partition système en lecture seule, donc un accès root est nécessaire pour le modifier.
La commande dhcpcd, qui est exécutée pour obtenir une adresse dhcp, ne mettra pas à jour vers un nom d'hôte fourni par le serveur (Cela peut être corrigé en ajoutant les bons dhcpcd-run-hooks et dhcpcd.conf), et elle ne fournira pas de nom d'hôte au serveur dhcp si $(hostname)
(La commande hostname) est vide ou localhost, et elle n'utilise pas internalement net.hostname. libnetutils est utilisé pour appeler dhcpcd avec -h "net.hostname", mais si pour une raison quelconque il décide de ne pas appeler avec -h, DHCPCD ENVERRA QUAND MÊME LE NOM D'HÔTE DU SYSTÈME via gethostname(), tant que ce n'est pas "(none)", "localhost" ou vide. En tout cas, sur Froyo stock. Samsung a foiré sur certains appareils comme le mien. Pas de passage de nom d'hôte, temps réseau forcé, etc.
Ma solution pour Gingerbread et les Samsung antérieurs, Modifier la configuration du client DHCP :
La dernière chose que vous pouvez faire est de modifier /etc/dhcpcd/dhcpcd.conf. Si vous ajoutez hostname VOTRENOMHOTE
au fichier, il l'utilisera, sauf si un nom d'hôte est donné en ligne de commande. Cela ne résoudra pas le problème de android_234etc, mais le résoudra si le nom d'hôte est localhost (Mon problème, puisque Samsung a bricolé libnetutils et localhost dans init.rc). Vous aurez besoin des droits root, mais cela fonctionne à travers les redémarrages. Cela ne fonctionnera pas si dhcpcd est appelé avec l'option -h Nomhote.
0 votes
Il est également possible de configurer le nom d'hôte via le serveur DHCP. Mais je n'ai pas vérifié si Android utilise cette option de configuration. Ce n'est de toute façon qu'une option cosmétique.
2 votes
blog.burrowsapps.com/2011/09/android-change-hostname.html.
0 votes
@Flow (Varies but) Android DHCPCD n'a pas les dhcpcd-run-hooks pour définir le nom d'hôte à partir du DHCP. Du moins sur mon appareil Samsung Froyo. Il n'a pas non plus les hooks ntp. Cependant, DHCPCD le prend en charge.
0 votes
Pour GNU Linux : askubuntu.com/questions/9540/how-do-i-change-the-computer-name , les méthodes du noyau de bas niveau fonctionneront