gpt4 book ai didi

python - 如何将CUPS打印机绑定(bind)到用户?

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:54 26 4
gpt4 key购买 nike

以下情况:

  • 我们使用 LDAP/GOSA 来管理用户及其打印机
  • 我使用 perl 脚本从 LDAP 中提取用户数据并将其解析为 yaml 文件(在用户每次登录时)
  • 我使用 python 脚本中解析的信息来配置 cups 打印机(在用户每次登录时)
  • python 脚本清理旧配置的打印机并配置新打印机。为了进行清理,我使用 Bash 脚本:

    #!/bin/bash

lpstat -p | awk '/^printer/ {print $2}' | while read printer
do
echo "Deleting Printer/Class:" $printer
lpadmin -U $SUDO_USER -x $printer
done

我的问题是,当我切换用户时,所有 CUPS 打印机都将重新配置。有没有一个功能可以将CUPS打印机绑定(bind)到特定用户,并且只清理属于该用户的打印机?

示例:User1 使用打印机 dev1、dev2 和 dev3 登录。现在,他切换到只有 dev1 打印机的 User2 的新 session 。现在两个用户的 dev2 和 dev3 都将被删除,切换回 User1 后 dev2 和 3 就不存在了。

提前致谢!

问候

斯特凡

编辑:找到答案!当我有时间记录一切时,我将在下午发布。

EDIT2:答案已发布;)

最佳答案

我找到了问题的答案:

我使用一个函数来查找每个登录的用户并使用每个登录用户的所有 yaml 文件(userconfig.yaml 被永久保存并在登录期间获取更新)。

# using self made module system.current_users()
users = system.current_users()

printers_with_users = {}

for username in users:

try:
printer_yaml = config_data.retrieve_for(username).get(u"printers", [])
except:
print("Aborting: Can't find userconfig.yaml!\n")
exit(1)

for device, dev_list in printer_yaml.iteritems():
# parsing datas...
config_classes = dev_list.get("config_classes", None)
descr = get_unicode(dev_list, u"descr")
printer_id = get_unicode(dev_list, u"id")
is_local = dev_list.get("is_local", None)
listen_network = dev_list.get("listen_network", None)
location = get_unicode(dev_list, u"location")
ppd_file = get_unicode(dev_list, u"ppd_file")
ppd_uri = get_unicode(dev_list, u"ppd_uri")
printer_uri = get_unicode(dev_list, u"printer_uri")

# here is the cool part ;)
printers_with_users.setdefault(printer_id, []).append(username)

#configuring printers...

# configure access rules in printers.conf
for printers, accepted_users in printers_with_users.iteritems():
users_string = ",".join(accepted_users)
try:
subproc.call('lpadmin', ['-p', printers, '-u', 'allow:%s' % users_string])
except:
print ( " - unable to set user access rules\n" )
print (config_error) % printers
continue

我也在为类(class)做同样的事情。

我仍然可以在每次登录期间清理整个配置文件,并且还可以确保每个用户都可以使用自己的打印机。

希望这对遇到同样问题的每个人都有帮助(即使它只是整个打印机管理器的一小部分;))。

关于python - 如何将CUPS打印机绑定(bind)到用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18826619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com