hiroの長い冒険日記

主にコンピュータ周辺の興味を持った内容を綴ります

PCManFM で SMB2 以上で接続する方法

Debian 9.6 の LXDE 環境で、file manager として PCManFM を使用している。local な file を見る際には日本語の filename を含めて問題なく使用できるが、Synology DS218+ の network folder に接続出来ない状態だった。

いくら local とはいえ SMB1 は使いたくなかったので、Synology DS218+ 側で SMB protocol の制限を掛けている。

Maximum SMB protocol : SMB3
Minimum SMB protocol : SMB2 and Large MTU

この制限が理由で接続できない事は分かっていた。Minimum protocol を SMB1 にすれば接続できる事も確認していた。

折角なので、PCManFM で SMB2 以上で接続できるように設定してみた。

PCManFM の smb 対応

PCManFM では、smb や nfs等の様々な network filesystem に gvfs を使用して接続している。debian 9.6 では /usr/share/gvfs/mounts 以下に設定ファイルが存在していて、smb については以下の様になっている。
/usr/share/gvfs/mounts/smb.mount:

[Mount]
Type=smb-share
Exec=/usr/lib/gvfs/gvfsd-smb
AutoMount=false
Scheme=smb

gvfsd-smb command で実際の処理を行っている。link している lib を調べてみる。

$ ldd /usr/lib/gvfs/gvfsd-smb | grep -e libsmb -e libsamba
        libsmbclient.so.0 => /usr/lib/x86_64-linux-gnu/libsmbclient.so.0 (0x00007f7680585000)
        libsamba-util.so.0 => /usr/lib/x86_64-linux-gnu/libsamba-util.so.0 (0x00007f767e99b000)
        liblibsmb.so.0 => /usr/lib/x86_64-linux-gnu/samba/liblibsmb.so.0 (0x00007f767e32b000)
        libsamba-errors.so.1 => /usr/lib/x86_64-linux-gnu/libsamba-errors.so.1 (0x00007f767ddc8000)
        libsamba-security.so.0 => /usr/lib/x86_64-linux-gnu/samba/libsamba-security.so.0 (0x00007f767d9a6000)
        libsmbconf.so.0 => /usr/lib/x86_64-linux-gnu/libsmbconf.so.0 (0x00007f767d72c000)
        libsamba3-util.so.0 => /usr/lib/x86_64-linux-gnu/samba/libsamba3-util.so.0 (0x00007f767d523000)
        libsamba-debug.so.0 => /usr/lib/x86_64-linux-gnu/samba/libsamba-debug.so.0 (0x00007f767d107000)
        libsmbregistry.so.0 => /usr/lib/x86_64-linux-gnu/samba/libsmbregistry.so.0 (0x00007f767bfe7000)
        libsamba-hostconfig.so.0 => /usr/lib/x86_64-linux-gnu/libsamba-hostconfig.so.0 (0x00007f7678381000)
        libsmb-transport.so.0 => /usr/lib/x86_64-linux-gnu/samba/libsmb-transport.so.0 (0x00007f767817b000)
        libsamba-credentials.so.0 => /usr/lib/x86_64-linux-gnu/libsamba-credentials.so.0 (0x00007f7677f69000)
        libsamba-sockets.so.0 => /usr/lib/x86_64-linux-gnu/samba/libsamba-sockets.so.0 (0x00007f76771eb000)
        libsmbd-shim.so.0 => /usr/lib/x86_64-linux-gnu/samba/libsmbd-shim.so.0 (0x00007f76763d0000)
        libsamba-modules.so.0 => /usr/lib/x86_64-linux-gnu/samba/libsamba-modules.so.0 (0x00007f7673103000)

なので、libsmbclient を含む samba の library を使用して、smb server への接続を確立している事が分かる。

libsmbclient の設定

www.samba.gr.jp
www.atmarkit.co.jp
これらのサイトの情報より、

  • /etc/samba/smb.conf
  • ~/.smb/smb.conf.append

の何れかに client max protocol を指定すれば出来そうな感じ。

client max protocol の指定

~/.smb/smb.conf.append

$ cat ~/.smb/smb.conf.append 
[global]
client max protocol = SMB3
client min protocol = SMB2

  • /etc/samba/smb.conf でも同じ様に機能する。
  • client max protocol と client min protocol の両方を指定すると、browsing が出来なくなるが、ip address を直に指定すれば接続できる。
  • client max protocol だけを指定すると、browsing も出来て smb server が見えるようになる。

結果

  • PCManFM で SMB2 以上で smb server へ接続する事が出来た。
  • libsmbclient を使用している他の software でも同様に使えると思う。
  • man smb.conf や他のサイトを見ると、automatic negotiation されるので設定不要と書かれているが、実際には client max protocol を指定しないと接続出来なかった。
  • client min protocol で SMB2 を指定すると browsing が出来なかった。今の使い方だと browsing までは不要なので、このまま使用してみる。

改めて記事を書く事が無い位に安定して動作している。だんだん暖かくなり、夏を迎えた時にも安定して動いてくれるかどうか、これから確認していく。今は WD Red 4TB x 2 で使用しているが、IronWolf との組み合わせでも良かったかなぁと思っている。