KDE4/Plasma、wpa_supplicant、networkmanager、systemdでArchシステムを実行しています...
# cat /proc/version
Linux version 5.0.0-Arch1-1-Arch (builduser@heftig-18825) (gcc version 8.2.1 20181127 (GCC)) #1 SMP PREEMPT Mon Mar 4 14:11:43 UTC 2019
私の/etc/hostname
の内容はlocalhost
です。起動後、シェルコマンドhostname
がlocalhost
を出力するようになりました。より正確に:
# hostnamectl
Static hostname: localhost
Transient hostname: localhost.localdomain
Icon name: computer-laptop
Chassis: laptop
Machine ID: 7e0a101cd2f0406497a6e4354fc9b3b7
Boot ID: a1424a0995da4e84b1e55b7f79df957e
Operating System: Arch Linux
Kernel: Linux 5.0.0-Arch1-1-Arch
Architecture: x86-64
WiFiをオンにすると、networkmanagerがWiFiネットワークに接続し、ホスト名が変更されます。例えば:
# hostnamectl
Static hostname: localhost
Transient hostname: localhost.localdomain
Icon name: computer-laptop
Chassis: laptop
Machine ID: 7e0a101cd2f0406497a6e4354fc9b3b7
Boot ID: a1424a0995da4e84b1e55b7f79df957e
Operating System: Arch Linux
Kernel: Linux 5.0.0-Arch1-1-Arch
Architecture: x86-64
シェルコマンドhostname
は、localhost
の代わりにlocalhost.localdomain
を出力するようになりました。
その結果、KDEロック画面のロックを解除できず、KDE(または他のデスクトップ)の端末からXアプリケーションを起動できません。典型的なエラーメッセージは次のとおりです。
$ gvim
Invalid MIT-MAGIC-COOKIE-1 keyE233: cannot open display
Rootとしてhostnamectl set-hostname localhost
を発行すると、動作は通常に戻ります。
他の一部のWiFiでは、接続後のホスト名はlocalhost.localdomain
ではなく、さらにランダムなものです(ほとんどの場合、大企業ネットワークでは、WiFiプロバイダーによって決定されたホスト名のようです)。 WiFiプロバイダーにホスト名を設定する権限があるのはなぜですか?これはどういうわけか変更できますか?
Ivanivanの答え(dhcpcd.con
の調整)はもっともらしいですが、私の場合はうまくいきませんでした。ですから、DHCPに関するものではないと思います。私はこの投稿に出くわしました: dhcpcdがホスト名を設定するのを防ぎます
私の問題を引き起こしたのはDHCPではなくNetworkManagerに関するものです。 /etc/MetworkManager/NetworkManager.conf
に以下を追加すると、問題が解決しました。
[main]
plugins=keyfile
hostname-mode=none
man 5 NetworkManager.conf
オプションの詳細については、hostname-mode
を参照してください。これをnone
に設定すると、NetworkManagerが一時的なホスト名を設定できなくなります。これは私の場合に発生したことです。
それを修正するいくつかの潜在的な方法。 /etc/hosts
にlocalhost
エントリがあるが(地球上の他のすべてのように)、localhost.localdomain
エントリがない可能性があります。これも127.0.0.1を指すように追加すると、「自宅」の問題は修正される可能性がありますが、「大企業」ネットワークで発生する「ランダム」に見える問題は修正されません。
ただし、「より良い」オプションは、dhcpクライアントの構成を確認することです。 /etc/dhcp/dhclient.conf
(またはディストリビューションによってはdhcpcd.conf
の場合があります)でrequest
行を探します-
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, Host-name,
dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers;
そして、単にHost-name
オプションを削除します。