web-dev-qa-db-ja.com

NetworkManagerがホスト名の設定に干渉する

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です。起動後、シェルコマンドhostnamelocalhostを出力するようになりました。より正確に:

# 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プロバイダーにホスト名を設定する権限があるのはなぜですか?これはどういうわけか変更できますか?

2
LaTechneuse

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が一時的なホスト名を設定できなくなります。これは私の場合に発生したことです。

2
LaTechneuse

それを修正するいくつかの潜在的な方法。 /etc/hostslocalhostエントリがあるが(地球上の他のすべてのように)、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オプションを削除します。

2
ivanivan