我目前在Ubuntu上访问Windows打印共享时出现问题(在工作,所以我不会再访问他们的设置),所以我最终还是围绕着Gnome的'system-config-printer
'用Python编写,并使用Samba的Python smbc
绑定。Python Samba:未通过用户凭证(cli_init_creds)?
我已经基本上设法弄到了我的问题,这一段代码,它来自/usr/share/system-config-printer/pysmb.py
,而我在python
命令行shell中运行:
import smbc, os
def do_auth (svr, shr, wg, un, pw):
return ("myworkdomain.com", "MYWORKUSERNAME", "MYWORKPASSWORD")
ctx = smbc.Context (debug=10, auth_fn=do_auth)
f = ctx.open ("smb://%s/%s" % ("printserver.myworkdomain.com", "PRINTSHARENAME"), os.O_RDWR, 0777)
第一个(有点)问题是,在执行ctx = smbc.Context...
行时,Python总是抱怨:
params.c:OpenConfFile() - Unable to open configuration file "/home/MYUSERNAME/.smb/smb.conf":
No such file or directory
......但也许这不是一个真正的问题? (也许smbc
是应该重新创建这个文件?)。
最大的问题是,当然,我无法连接到共享:在执行f = ctx.open...
行后,有桑巴沟通的自卸大时,Windows服务器似乎是在说等等 - 和连接的努力失败结束:
SPNEGO login failed: Logon failure
cli_init_creds: user domain myworkdomain.com
session setup ok
map_errno_from_nt_status: 32 bit codes: code=c0000022
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
smbc.PermissionError: (13, 'Permission denied')
基本上,我了解得太少桑巴能够读取错误日志的休息,但我觉得这行:
cli_init_creds: user domain myworkdomain.com
...非常可疑 - 它看起来好像'user
'有一个空字符串 - 尽管我期望它是'MYWORKUSERNAME
',如上面的'do_auth
'函数所指定的!
注意,这种故障是有点类似NT_STATUS_LOGON_FAILURE
,我用来获取与CMDLINE(见Obtaining Windows printer share SMB settings (for tsclient/rdesktop on Linux) - Super User),这是由显式地指定命令行上Windows工作组解决了 - 但是,我不能告诉如果是在Python的情况下也是这个问题;或者相反,用户名不会在这里传递(或完全是第三个)。编辑:这工作的命令行(其中列出了股)是(关于这个例子):
smbclient -L \\printserver.myworkdomain.com -U MYWORKUSERNAME -W myworkdomain.com
在此先感谢您的任何建议,
干杯!