sjisファイル名を持ったディレクトリのsmbmount

  • 上記の方法だと、ファイル名の文字コードを直してくれないのでLinux側からは文字化けて見えてしまう.そこで自分のディレクトリをsambaマウントしてみた.
  • しかし、うちの鯖は既にsambaサーバを立てているので、アクセスしてきたクライアントに応じてsmbdが文字コードを変更してやる必要がある.
  • で以下 smb.conf の文字コード設定の部分.

[global]
include = smb.conf.default

## override parameter "unix charaset"
include = smb.conf.%U

dos charset = CP932
display charset = CP932

  • smb.conf.defaultの中身

unix charset = EUC-JP

  • smb.conf.sjis-userの中身

unix charset = CP932

mount -t cifs //localhost/sjis_dir /mnt/smbfs_sjis -o username=sjis-user,codepage=cp932,iocharset=euc-jp

  • 上記設定の解説:sambaにログインしてくるユーザ名で動作を変更する.ファイル名の文字コードはデフォルトだとEUC-JPだが、sjis-userに対してはsjisであるものとしてサービスする.
    • ハマリ1:最初はnetbios名を複数用意し、includeオプションには%Lを使う予定だったが、cifsがnetbiosの名前解決をやってないため、あえなく断念.
    • ハマリ2:Windowsから認証するとき、確かにユーザ名がsmbdに届いてはいるみたいなんだけど(/var/log/message で確認)、なぜか include %U が使えない。本当に謎。仕方が無いので、デフォルト設定をsmb.confに書き、sjis-userの設定はそれをoverrideよう変更.
    • ハマリ3:includeした設定はsmb.confに直に書いた設定を上書きできない.しかし、includeされた設定は上書きできる.そこでsmb.conf.defaultを用意.