В настоящее время у меня проблема с доступом к общим ресурсам печати Windows ( на работе, поэтому у меня нет доступа к их настройкам ) в Ubuntu, поэтому я в итоге приступил к поиску источника Gnome. 'system-config-printer
', который написан на Python и использует привязки Python smbc
для Samba.
Мне в основном удалось свести мою проблему к этому коду, который взят из /usr/share/system-config-printer/pysmb.py
и который я запускаю в командной строке python
:
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...
возникает большой дамп соединения Samba, сервер 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')
По сути, я слишком мало знаю о Samba, чтобы прочитать остальную часть журнала ошибок, но нахожу строку:
cli_init_creds: user domain myworkdomain.com
... очень подозрительно - похоже, что 'user
' содержит пустую строку - хотя я ожидал, что это будет 'MYWORKUSERNAME
', как определено функцией 'do_auth
' выше!!
Обратите внимание, что этот сбой в некоторой степени похож на NT_STATUS_LOGON_FAILURE
, который я использовал для получения команды cmdline smbclient
(см. Получение общих настроек SMB для принтера Windows (для tsclient / rdesktop в Linux) - Super User ), которая была решена путем явного указания рабочей группы Windows в командной строке - однако я не могу сказать, является ли это также проблемой здесь, в случае Python; или, если вместо этого, имя пользователя здесь не передается (или что-то совершенно третье). РЕДАКТИРОВАТЬ: эта рабочая командная строка (которая перечисляет общие ресурсы) (в отношении этого примера):
smbclient -L \\printserver.myworkdomain.com -U MYWORKUSERNAME -W myworkdomain.com
Заранее спасибо за любые предложения,
Ура!