asdf@MiWiFi-R2D-srv:~$ hostnamectl Static hostname: Debian Transient hostname: MiWiFi-R2D-srv Icon name: computer-desktop Chassis: desktop 🖥️ Machine ID: 3b0e2483f1a718e2cd0885fd53e8b700 Boot ID: 65661c83045b4ffc81d64d49e4cca518 Operating System: Debian GNU/Linux 12 (bookworm) Kernel: Linux 6.1.0-9-amd64 Architecture: x86-64 Hardware Vendor: Gigabyte Technology Co., Ltd. Hardware Model: G1.Sniper B5 Firmware Version: F6
/etc/hostname 用的是 Static hostname
而 hostname 修改的是 Transient hostname
电脑启动的时候用的是 Transient hostname
我们需要
hostnamectl set-hostname Debian
这个命令修改 hostname 为 Debian
这样会同时把 static 和 transient 名字修改了
当重启后,transient hostname
就会改为 static
遵循的是重启读取的是/etc/hostname
linux设置了静态IP之后还会获取动态IP导致hostname无法修改的问题解决
原因是network与NetworkManager服务冲突
第一步是禁用NetworkManager服务
systemctl stop NetworkManager.service
systemctl disable NetworkManager.service
第二步重启network服务
systemctl restart network
原因是connman
https://wiki.archlinuxcn.org/wiki/ConnMan
ConnMan 默认会更改临时 hostname。与 X authority 一起使用时会有问题:如果用旧的 hostname 生成了 xauth magic coookie 之后,ConnMan 改变了你的 hostname,那么将无法创建新的窗口,会显示诸如 No protocol specified 和 Can't open display: :0.0 的错误。手动重置 hostname 可以解决这个问题,但根本的解决办法是从一开始就防止 ConnMan 改变你的 hostname。把下面的配置加入 /etc/connman/main.conf 即可:
[General] AllowHostnameUpdates=false
改变这个文件后记得重启 connman.service。
要测试的话,建议一边观察 systemd 日志,一边插拔几次网线接口。