问题
最近配置一台RH linux 9samba 共享,在支持中文的windows xp 系统上访问,samba 共享的中文目录和文件名乱码,显示为问号,但打开文件,里面的中文显示正常。
查看语言环境如下:
# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
查看分区环境如下:
$ mount
...
/dev/hdc5 on /mnt/win type vfat (rw)
...
解决
对于类似问题,Linux下的中文显示和支持常见问题解答中有比较详细的解决方法。
首先,使用正确的代码页和字符集mount 带有中文的分区,编辑文件/etc/fstab ,修改为:
/dev/hdc5 /mnt/data1 vfat defaults,codepage=936,iocharset=cp936 0 0
这个修改在下次启动系统时生效,修改当前的mount 配置:
$ umount /dev/hdc5
$ mount -t vfat -o codepage=936,iocharset=cp936 /dev/hdc5 /mnt/win
$ mount
...
/dev/hdc5 on /mnt/data1 type vfat (rw,codepage=936,iocharset=cp936)
...
接下来,编辑samba 配置文件/etc/samba/smb.conf ,在[global] 中加入如下2 行(注意顺序):
client code page = 936
character set = 936
如果是繁体中文系统,使用950 替换936。修改完smb.conf 可使用如下命令check 配置文件是否包含语法错误:
$ testparm
unrecognized character set 936
这个错误信息会出现,但这句的确有用。重启动samba 服务使修改的配置文件生效:
$ service smb restart
通过Windows 再访问samba 共享,中文目录和文件名已经可以正常显示。
另外,有很多资料介绍在smb.conf 中进行如下配置来解决此问题(比如:http://www.blog.edu.cn/user1/2065/archives/2005/212233.shtml):
display charset = cp936
unix charset = cp936
dos charset = cp936
上面的参数只有在较新的samba 版本中才支持,随RHL 9 提供的版本2.2.7a不支持以上参数:
$ smbd -V
Version 2.2.7a
$ man smb.conf
修改smb.conf 后使用testparm 检查一遍是个不错的主意。


