如何挂接中文SMB共享(各种论坛上已知方法于我都无效)

包含网卡/无线网的网络问题和ADSL/校园网/宽带拨号支持及代理/共享等网络使用问题
zhangweiwu
帖子: 30
注册时间: 2007-06-03 13:52
来自: 北四环中路238号 柏彦大厦406b室
联系:

如何挂接中文SMB共享(各种论坛上已知方法于我都无效)

#1

帖子 zhangweiwu » 2007-11-29 16:26

我知道很多人可能认为这是老问题了,应该去Google上找。老实说我来问之前已经在Google上找了3小时并经过2小时尝试不同方法和读man page,实在找不出解法。

所有网上提到的方法无外乎加iocharset=UTF-8 codepage=CP936。都无效果。

本机(Ubuntu 7.04)所有用户均使用UTF-8,内核是自带的没有改动。服务器为Debian Linux,其上samba没有被配置成为使用GB18030,准确地说,服务器上与charset有关的配置仅一条: unix charset = UTF-8

此服务器上文件多为中文,使用Windows XP中文版、英文版及德文版访问均中文正常!仅有使用Linux mount上后中文为乱码。
mount -t smbfs //gtz.ods.org/SharedDocs /mnt (乱码)
mount -t smbfs -o iocharset=UTF-8 //gtz.ods.org/SharedDocs /mnt (乱码)
mount -t smbfs -o iocharset=UTF-8,codepage=CP936 //gtz.ods.org/SharedDocs /mnt (乱码)

后两种方式挂接会在dmesg中有以下错误:
[23060.326849] Unable to load NLS charset CP936
[23060.326881] smbfs: failed to load nls 'CP936'

有人会问即是Linux客户机访问Linux服务器,为何不使用NFS?答案是NFS安全性基于IP地址设置,而本机使用DSL线路无法提供固定IP地址;而配置基于Kerberos的NFSv4似比解决当下使用smbfs挂接的问题更为麻烦,并且(无故地)增加了服务器提供的服务数量。

望高手施以援手。谢谢!

又及:服务器使用 security = share ,此举为兼容现有的大量Windows 98客户机。考虑到这一点,才在挂接时使用smbfs而非cifs。实际上如果换为cifs将挂接失败。
头像
magicsky
帖子: 225
注册时间: 2007-03-30 9:46

#2

帖子 magicsky » 2007-11-29 16:42

我的方法是sudo smbmount //$remoteIP/$sharedDirectory $distDirectory -o rwx
在国外,众多程序员为了理想而夜以继日;
而在国内,程序员在为填饱自己和家人的肚子而埋头苦干。
zhangweiwu
帖子: 30
注册时间: 2007-06-03 13:52
来自: 北四环中路238号 柏彦大厦406b室
联系:

#3

帖子 zhangweiwu » 2007-11-29 20:02

楼上所说 smbmount 无效,同样是乱码。
头像
windwiny
帖子: 2254
注册时间: 2007-03-13 17:26

#4

帖子 windwiny » 2007-11-30 8:45

代码: 全选

iocharset=utf8,codepage=cp936
zhangweiwu
帖子: 30
注册时间: 2007-06-03 13:52
来自: 北四环中路238号 柏彦大厦406b室
联系:

#5

帖子 zhangweiwu » 2007-12-01 11:36

代码: 全选

zhangweiwu@esmeralda:~$ sudo mount -t smbfs -o iocharset=utf8,codepage=CP936 //gtz.ods.org/SharedDocs /mnt/
Password: 
zhangweiwu@esmeralda:~$ ls /mnt/
|                                         l
?                                         l
205342984.rar                             l
a - CPD                                   Le Xiyong
a - Indicator system                      Lisa
a - Internal Monitoring                   Liu Yanli
a - Newsletter                            Luo Rumin
a - Project Folder -                      Main Assignments for Mr WZQ.doc
a - Project Website                       Michael
a - Training material                     p
a - Translations of Documents in English  p
b - Pictures                              PADO INPUT.xls
David                                     Pan Fan
for Wang Yongming                         qian wei
for Yan Han                               QXD
For Zhang Weiwu                           t
Gerd                                      Wang Heng
HPP                                       WP Finale-
IP.doc                                    x
l                                         zzf
l
zhangweiwu@esmeralda:~$ dmesg | tail
[83444.441192] agpgart: Putting AGP V2 device at 0000:00:0b.0 into 1x mode
[83444.441225] agpgart: Putting AGP V2 device at 0000:00:10.0 into 1x mode
[83444.681808] [drm] Setting GART location based on new memory map
[83444.681929] [drm] writeback test succeeded in 1 usecs
[83451.223838] agpgart: Putting AGP V2 device at 0000:00:0b.0 into 1x mode
[83451.223868] agpgart: Putting AGP V2 device at 0000:00:10.0 into 1x mode
[86175.523932] Unable to load NLS charset CP936
[86175.523958] smbfs: failed to load nls 'CP936'
[86204.654930] Unable to load NLS charset CP936
[86204.654956] smbfs: failed to load nls 'CP936'
按:上面ls的输出中,单个字符的文件夹其实都是中文文件夹乱码(实际不存在名为单个字符的文件夹)
头像
yysq009
帖子: 2682
注册时间: 2007-01-28 23:00
来自: @江西|南昌@
联系:

#6

帖子 yysq009 » 2007-12-01 11:42

代码: 全选

mount -t smbfs -o iocharset=UTF-8,codepage=CP936 //gtz.ods.org/SharedDocs /mnt
我一直是这个命令。。。

PS:LZ要确定你WIN系统哪里文件的编码 CP936只是一种参数 还有很多的。

Do as you would be done by !
zhangweiwu
帖子: 30
注册时间: 2007-06-03 13:52
来自: 北四环中路238号 柏彦大厦406b室
联系:

#7

帖子 zhangweiwu » 2007-12-01 11:50

我一直是这个命令。。。

PS:LZ要确定你WIN系统哪里文件的编码 CP936只是一种参数 还有很多的。
惭愧!我从来就没有成功无乱码地挂接过smbfs,此外前文已经说明,服务器是Debian而非Windows。其配置文件全文如下:

代码: 全选

[global]
   netbios name = USER10-4-1
   unix charset = UTF-8
   workgroup = WORKGROUP
   server string = %h server
   dns proxy = no
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   security = share
   encrypt passwords = true
   passdb backend = tdbsam
   obey pam restrictions = yes
   guest account = nobody
   invalid users = root
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .
   load printers = yes
   printing = cups
   printcap name = cups
   socket options = TCP_NODELAY
[SharedDocs]
   comment = Shared Documents
   guest ok = yes
   guest account = nobody
   read only = no
   browseable = yes
   writable = yes
   path = /var/shared
[信息管理系统MIS]
   comment = 信息管理系统MIS
   guest ok = yes
   guest account = nobody
   read only = no
   browseable = yes
   writable = yes
   path = /var/MIS
[homes]
   comment = Home Directories
   browseable = no
   writable = no
   create mask = 0700
   directory mask = 0700
   valid users = %S
[printers]
   comment = All Printers
   browseable = yes
   guest account = smbprint
   path = /var/spool/samba
   printable = yes
   public = yes
   writable = yes
   guest ok = yes
   read only = no
   browseable = yes
   writable = yes
   path = /var/shared
   create mode = 0700
[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no
其中:
* 配置文件里并没有提到CP936,而其共享可以被中、英、德多种版本Windows XP访问均无乱码;
* 挂接时不指定codepage=CP936和指定codepage=CP936是同样的效果(乱码);
* dmesg里说我的内核没有nls cp936的支持;
头像
yysq009
帖子: 2682
注册时间: 2007-01-28 23:00
来自: @江西|南昌@
联系:

#8

帖子 yysq009 » 2007-12-01 12:05

mount -t smbfs -o iocharset=UTF-8,codepage=CP936 //gtz.ods.org/SharedDocs /mnt

主要是要设置正确的编码,,, 红色是你本地编码 蓝色是服务器编码。。 正确设置了就不会乱码了 CP936是WIN默认的编码。如果你是debian那么就应该不是这个了

Do as you would be done by !
头像
wth123456
帖子: 234
注册时间: 2006-12-07 17:32

#9

帖子 wth123456 » 2007-12-01 20:43

sudo mount //192.168.1.101/g gx -o username=administrator,iocharset=utf8
我就是这样用的,一点问题也没有,中文也能完美显示。
十年磨一剑,霜刃未曾试。今日把示君,谁有不平事?
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#10

帖子 eexpress » 2007-12-01 20:45

yysq009的是对的。
只是不如我的,我开ftp。共享用ftp才是真的。
● 鸣学
experience
帖子: 12
注册时间: 2006-09-08 9:01

#11

帖子 experience » 2007-12-02 15:48

LZ 的问题解决了么?
我目前碰到的也是这个问题。
我的Samba Server 是开在 运行 OpenWRT 的路由器上。Windows XP 和 Vista 访问均正常,不过我的Ubuntu一挂载,就是乱码。期待高手来解决。

另:我要是在Ubuntu机器上Ssh到OpenWRT上,charset选成gb18030或是gbk才能看到文件系统里的中文文件名。
Ubuntu的Terminal的缺省charset好象是UTF-8会有乱码,不知道这样说,有没有帮助。
zhangweiwu
帖子: 30
注册时间: 2007-06-03 13:52
来自: 北四环中路238号 柏彦大厦406b室
联系:

#12

帖子 zhangweiwu » 2007-12-02 21:52

谢谢楼上的非常用心地用红蓝笔标注出来!其实您所说我的已经知道了,相关的man我也读过多遍,算是家庭作业做得好的学生了;) 各种方法均没有效果,所以才在论坛上提问,一是以免其它用户也有问题,却因为少交流不知道;二是也许高手能从细节(如dmesg)找出解法,或者会再问我要提供的诊断信息。其实我自己学力有限,但是还是感觉到似乎是默认的内核配置有关的问题,考虑到gnome中读取smb共享并不使用内核提供的代码转换功能,而Ubuntu开发人员可能因此忽视了命令行用户?我的遭遇或为一提醒。

下面是各种尝试的记录:

代码: 全选

zhangweiwu@esmeralda:~$ sudo mount -t smbfs -o iocharset=UTF-8 //gtz.ods.org/SharedDocs /mnt/
Password: 
zhangweiwu@esmeralda:~$ ls /mnt/ | head -n 2
|
|
zhangweiwu@esmeralda:~$ sudo mount -t smbfs -o iocharset=UTF-8,codepage=UTF-8 //gtz.ods.org/SharedDocs /mnt/
Password: 
zhangweiwu@esmeralda:~$ ls /mnt/ | head -n 2
|
|
zhangweiwu@esmeralda:~$ ls /mnt/ | head -n 2
|
|
zhangweiwu@esmeralda:~$ sudo umount /mnt/
zhangweiwu@esmeralda:~$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
zhangweiwu@esmeralda:~$ dmesg | tail
[21661.526449] agpgart: Putting AGP V2 device at 0000:00:0b.0 into 1x mode
[21661.526480] agpgart: Putting AGP V2 device at 0000:00:10.0 into 1x mode
[28676.287420] agpgart: Putting AGP V2 device at 0000:00:0b.0 into 1x mode
[28676.287837] agpgart: Putting AGP V2 device at 0000:00:10.0 into 1x mode
[28676.547596] [drm] Setting GART location based on new memory map
[28676.547718] [drm] writeback test succeeded in 1 usecs
[29232.499775] agpgart: Putting AGP V2 device at 0000:00:0b.0 into 1x mode
[29232.499806] agpgart: Putting AGP V2 device at 0000:00:10.0 into 1x mode
[31192.442846] Unable to load NLS charset UTF-8
[31192.442876] smbfs: failed to load nls 'UTF-8'
注意上面名称为一竖线的文件都是乱码所致。
头像
magicsky
帖子: 225
注册时间: 2007-03-30 9:46

#13

帖子 magicsky » 2007-12-03 8:39

用konqueror行吗?
在国外,众多程序员为了理想而夜以继日;
而在国内,程序员在为填饱自己和家人的肚子而埋头苦干。
zhangweiwu
帖子: 30
注册时间: 2007-06-03 13:52
来自: 北四环中路238号 柏彦大厦406b室
联系:

#14

帖子 zhangweiwu » 2007-12-03 9:30

没有安装Konqueror。使用gnome是没有问题的(gnome中选择“连接到服务器”)。gnome无乱码。但是问题是gnome并没有使用挂接(似使用的gnome-vfs),所以gnome中显示共享文件夹正常而实际上命令行是看不到的(因为没有挂接到任何一个实际存在的目录上),mount命令输出中也没有gnome显示的共享文件夹。
头像
cannys
帖子: 95
注册时间: 2007-11-30 17:18

Re: 如何挂接中文SMB共享(各种论坛上已知方法于我都无效)

#15

帖子 cannys » 2008-11-01 16:48

DDDDDDDDDDDDDD
回复