それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ubuntu を4kディスプレイで拡大率125%や150%などの任意解像度をwindowsやMacみたいに選ぶ

4K モニタを使っていると、しんどい。

ubuntu で 4k ディスプレイを使っていると、解像度が細かすぎてしんどい。

windows 10 からは拡大率150% などが選べるが、 ubuntu はデフォルト設定では 200%/100%しか選べなかった。

125%と150% を有効にする。

gsettings で 実験的機能を有効にしてあげると、解像度の拡大倍率を指定できて、MacOSretina モードみたいなことができるようになる。

gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"
gsettings set org.gnome.mutter experimental-features "['x11-randr-fractional-scaling']"

設定するとこの通り、150%が出現する。これで快適になる。

f:id:takuya_1st:20191021180026p:plain
解像度

もとに戻すとき

もとに戻すには reset を使う

gsettings reset org.gnome.mutter experimental-features

参考資料

https://www.linuxuprising.com/2019/04/how-to-enable-hidpi-fractional-scaling.html?m=1

NetworkManagerがunmanaged(管理なし)になった問題を解決した

network-manager で管理できない。

network-manager で unmanaged になって、ubuntu desktop (gnome) からネットワークが管理できなかった。

依存関係が多くて、問題がわかりにくい。

ubuntu は 1年前から、 netplan が導入されているので、ubuntu server は systemd-networkd で管理、 ubuntu desktop は NetworkManager で管理することになっている。

それでは、/etc/network/interfaces はどうなったのか?

network-manager のときは、 network-manager が /etc/network/inteface をparsing して管理デバイスを見つけた上で除外し、残ったデバイスを管理するようになっている。

ただし、この設定はキャッシュされるらしい。(マジだったら、コレはホントめんどくさいわ)

networkd のときは、 networkd の起動後に /etc/network/intefaces を取得して管理する。こっちも面倒くさい。

デスクトップubuntu では networkd はいらない

使ってもいいんだけど、依存関係が多くて面倒くさいので、除外して切り分ける

sudo systemctl stop systemd-networkd.service
sudo systemctl disable systemd-networkd.service
sudo systemctl mask systemd-networkd.service

netplan の設定をシンプルにする。

netplan は networkmanager を使う設定にして、シンプルにする。

takuya@:~$ cat /etc/netplan/01-netcfg.yaml 
network:
  version: 2
  renderer: NetworkManager

netplanの設定を再生成してあげる

sudo netplan generate

これで、余計なものは動かなくなる。

ただし、場合分けのために除外し過ぎくらい除外してる。なので、netplan apply すら動かない。

この辺は、正直言ってubuntu の問題だろうなぁ。 networkmanager を指定してるのに 一旦 networkd を経由しようとしている。

takuya@:~$ sudo netplan generate 
takuya@:~$ sudo netplan apply 
Failed to start systemd-networkd.service: Unit systemd-networkd.service is masked.
Traceback (most recent call last):
  File "/usr/sbin/netplan", line 23, in <module>
    netplan.main()
  File "/usr/share/netplan/netplan/cli/core.py", line 50, in main
    self.run_command()
  File "/usr/share/netplan/netplan/cli/utils.py", line 130, in run_command
    self.func()
  File "/usr/share/netplan/netplan/cli/commands/apply.py", line 44, in run
    self.run_command()
  File "/usr/share/netplan/netplan/cli/utils.py", line 130, in run_command
    self.func()
  File "/usr/share/netplan/netplan/cli/commands/apply.py", line 153, in command_apply
    utils.systemctl_networkd('start', sync=sync, extra_services=netplan_wpa)
  File "/usr/share/netplan/netplan/cli/utils.py", line 82, in systemctl_networkd
    subprocess.check_call(command)
  File "/usr/lib/python3.7/subprocess.py", line 363, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['systemctl', 'start', '--no-block', 'systemd-networkd.service']' returned non-zero exit status 1.

NetworkManager の設定は多ファイルに分割されている

NetworkManager の設定ファイルは、/etc/NetworkManager だけでなく、 /usr/lib/NetworkManager などにデフォルト設定あったりして、それらがマージされて /etc/NetworkManager で上書きするようになっている。

takuya@:~$ sudo NetworkManager  --print-config
# NetworkManager configuration:
 /etc/NetworkManager/NetworkManager.conf (lib: 10-dns-resolved.conf, no-mac-addr-change.conf)
(run: netplan.conf) 
(etc: 10-globally-managed-devices.conf, default-wifi-powersave-on.conf)


## 略

/etc/NetworkManager で設定ファイルを見てもすべてが記載されているわけでじゃないので、 --print-config で最終的な設定を確認するのがポイント

ifupdown を使わないようにする。

ifupdown は /etc/network/interfaceを管理するので、 ifupdown も切り分けのために一旦無効化する。

sudo apt uninstall ifupdown
sudo apt uninstall ifupdown2
sudo apt uninstall netscript-2.4 

NetworkManager.conf でunamanged デバイスをすべて上書きして無効化する。

設定方法は、いくつか考えられるのだけど、umamanged になる問題を解決するために、すべての設定をOFFにしたり消していく。

takuya@:~$ cat /etc/NetworkManager/NetworkManager.conf 
[main]
#plugins=ifupdown,keyfile
plugins=keyfile
dns=default

[keyfile]
unmanaged-devices=
#[ifupdown]
#managed=true

[device]
wifi.scan-rand-mac-address=yes

ちなみに、ifupdownのmanaged は ifup/ifdown で管理される /etc/network/intefacesを nmcli で管理するかどうか。

restart する

あれこれ、余計なものを排除した結果動くようになる、

takuya@:~$ sudo systemctl status network-manager.service 
● NetworkManager.service - Network Manager
   Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-10-21 17:20:33 JST; 10s ago
     Docs: man:NetworkManager(8)
 Main PID: 4474 (NetworkManager)
    Tasks: 4 (limit: 4915)
   Memory: 4.0M
   CGroup: /system.slice/NetworkManager.service
           └─4474 /usr/sbin/NetworkManager --no-daemon

10月 21 17:20:33 j5005 NetworkManager[4474]: <info>  [1571646033.9682] device (enp3s0): state change: ip-config -> ip-check (reason 'none', sys-iface-state: 'assume')
10月 21 17:20:33 j5005 NetworkManager[4474]: <info>  [1571646033.9809] device (enp3s0): state change: ip-check -> secondaries (reason 'none', sys-iface-state: 'assume')
10月 21 17:20:33 j5005 NetworkManager[4474]: <info>  [1571646033.9813] device (enp3s0): state change: secondaries -> activated (reason 'none', sys-iface-state: 'assume')
10月 21 17:20:33 j5005 NetworkManager[4474]: <info>  [1571646033.9819] manager: NetworkManager state is now CONNECTED_LOCAL
10月 21 17:20:33 j5005 NetworkManager[4474]: <info>  [1571646033.9832] manager: NetworkManager state is now CONNECTED_SITE
10月 21 17:20:33 j5005 NetworkManager[4474]: <info>  [1571646033.9834] policy: set '有線接続 1' (enp3s0) as default for IPv4 routing and DNS
10月 21 17:20:33 j5005 NetworkManager[4474]: <info>  [1571646033.9876] device (enp3s0): Activation: successful, device activated.
10月 21 17:20:33 j5005 NetworkManager[4474]: <info>  [1571646033.9885] manager: NetworkManager state is now CONNECTED_GLOBAL
10月 21 17:20:33 j5005 NetworkManager[4474]: <info>  [1571646033.9892] manager: startup complete
10月 21 17:20:34 j5005 NetworkManager[4474]: <info>  [1571646034.0348] bluez5: NAP: added interface 00:09:DD:50:6C:BF

管理下に置かれる

takuya@:~$ nmcli d
DEVICE  TYPE      STATE     CONNECTION 
enp3s0  ethernet  接続済み  有線接続 1 
lo      loopback  管理無し  --         

unmanaged だったのが

f:id:takuya_1st:20191021172309p:plain

managed になる。

f:id:takuya_1st:20191021172202p:plain

なんでこんなにめんどくさいのか

過渡期とはいえ、systemd 関連の更新と整合性を保つために、あれこれ機能が追加されている。

あれこれ過渡期だからでしょうね。 nmcli や netplan を諦めて /etc/network/interfacesだけに戻すか、素直にnetworkd だけにしたほうが将来的に楽なのかなぁ。

今回驚いたのは ifup/down のコマンドを提供するパッケージが3つもあったことだった。ネットワーク周りはカオスですね。

NetworkManager でDHCPで取得したDNSの設定を/etc/resolv.confに書き込む

ubuntu デスクトップのネットワーク設定は NetworkManagerから

Ubuntu のネットワーク周りはカオス。というか、最近のLinuxのネットワーク周りはディストリ間でsystemdによる共通化を受容している段階なのでややこしい。

Ubuntuのデスクトップ版は主にNetworkManagerで管理しているんだけど、DNSの設定は、resolv.confに直接書かずにリンクになってたりする。これがちょっと不満なので、直接 /etc/resolv.confに書き込んでほしい。

/etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile
dns=default

設定したら再起動

再起動して、DNS設定をDHCPから取得し直す。

sudo systemctl restart network-manager

もし。/etc/resolv.confがsymlinkになって利すると面倒なので、いったん/etc/resolv.confを空にしておくといいかも

sudo rm /etc/resolv.conf;
sudo touch /etc/resolv.conf

再起動後は、直接取れる。

再起動後、DHCPで割り振られたDNSサーバーが直接参照できるようになる。

takuya@:~$ ll /etc/resolv.conf
-rw-r--r-- 1 root root 89 2019-10-11 15:38 /etc/resolv.conf

/etc/resolv.conf

# Generated by NetworkManager
search local
nameserver 192.168.2.1
nameserver 192.168.2.5

network-managerのDNS設定

https://qiita.com/onokatio/items/af0035d1563acbbfeed2

これによると、次のようになる。

  • dnsモード 振る舞い
  • default 取得したDNSサーバーをそのまま使います。
  • dnsmasq キャッシュ用にdnsmasqをサブプロセスとして起動します。DNSサーバーは127.0.0.1を使います。
  • unbound 上のunboundバージョン
  • systemd-resolved 上のsystemd-resolvedバージョン
  • none NetworkManagerはDNSに関して何もしません。また次に書いてあるrc-managerも無効になります。

ネットワーク周りは面倒くさい。

dns の設定だけでも、

  • network-manager
  • /etc/resolv.conf
  • /etc/resolvconf.conf
  • systemd networkd-resolved

と、相互に依存しながら編集してるので、注意しないとデフォルト設定がどこに流れているのかわからなくなるよね。。。