Raspberry 主机名更改但并非如此

问题描述 投票:0回答:3

我在 /etc/hosts 和 /etc/hostname 中更改主机名

主持人:

127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

127.0.0.1       newhost

主机名:

newhost

是的,它有效

>>> socket.gethostbyname('newhost')
'10.0.0.45'

但是

import socket
>>> socket.gethostbyaddr('10.0.0.45')
('raspberrypi', [], ['10.0.0.45'])

前段时间我使用了不同的名称,它是双向的,然后我改变了它,它一直向我显示 raspberrypi。我相信一定有一些默认文件会触发此操作。任何人? 先谢谢大家了

python networking raspberry-pi host hostname
3个回答
1
投票

raspi-config 似乎没有详细记录,但更改主机名的解决方案是

sudo raspi-config nonint do_hostname ${NEW_HOSTNAME}
sudo reboot # Must reboot to see change

这是因为 raspi-config 是一个 bash 脚本,并且具有可以使用的非交互模式。到目前为止,这就是我们试图在下面触发的:

do_hostname() {
  if [ "$INTERACTIVE" = True ]; then
    whiptail --msgbox "\
Please note: RFCs mandate that a hostname's labels \
may contain only the ASCII letters 'a' through 'z' (case-insensitive), 
the digits '0' through '9', and the hyphen.
Hostname labels cannot begin or end with a hyphen. 
No other symbols, punctuation characters, or blank spaces are permitted.\
" 20 70 1
  fi
  CURRENT_HOSTNAME=`cat /etc/hostname | tr -d " \t\n\r"`
  if [ "$INTERACTIVE" = True ]; then
    NEW_HOSTNAME=$(whiptail --inputbox "Please enter a hostname" 20 60 "$CURRENT_HOSTNAME" 3>&1 1>&2 2>&3)
  else
    NEW_HOSTNAME=$1
    true
  fi
  if [ $? -eq 0 ]; then
    echo $NEW_HOSTNAME > /etc/hostname
    sed -i "s/127.0.1.1.*$CURRENT_HOSTNAME/127.0.1.1\t$NEW_HOSTNAME/g" /etc/hosts
    ASK_TO_REBOOT=1
  fi
}

0
投票

如果我正确地说你只是想更改 pi 的主机名,并且你正在运行 raspbian,那么树莓派配置中应该有一个选项可以更改它


0
投票

[已解决]

基于 MichielB 的答案here,在设置 pi 后通过 new_hostname 文件动态更改它的代码就在这里,无需对命令行进行修改,并且在设置后您不必重新启动 pi完成。此代码适用于您希望从基础映像批量生成操作系统映像,并且更大的 shell 脚本修改主机名文件以创建自己唯一的操作系统映像的情况,因此整个主机名更改过程是自动化的,无需重新启动。该代码可以与自定义前端服务一起使用来动态更改主机名

更多详细信息请参见 github 链接: https://github.com/techscapades/change-raspberrypi-hostname-from-file-no-reboot

#!/bin/bash

set +e

CURRENT_HOSTNAME=`cat /etc/hostname | tr -d " \t\n\r"`
NEW_HOSTNAME=`cat /path_to_new_hostname_file | tr -d " \t\n\r"`

echo `cat /path_to_new_hostname_file | tr -d "\t\n\r"` >/etc/hostname
sed -i "s/127.0.1.1.*$CURRENT_HOSTNAME/127.0.1.1\t$NEW_HOSTNAME/g" /etc/hosts
echo `cat /etc/new_hostname | tr -d "\t\n\r"` >/proc/sys/kernel/hostname

exit 0

您可以在退出前输入

systemctl restart avahi-daemon
,但您可能需要等待一段时间才能再次访问 your_new_hostname.local

© www.soinside.com 2019 - 2024. All rights reserved.