1

以下情况:

  • 我们使用 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 打印机绑定到特定用户并仅清理属于该用户的打印机的功能?

示例:User1 使用打印机 dev1、dev2 和 dev3 登录。现在他切换到与只有 dev1 打印机的 User2 的新会话。现在 dev2 和 dev3 将为两个用户删除,并且在切换回 User1 后 dev2 和 3 不存在。

提前致谢!

问候

斯特凡

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

EDIT2:答案已发布;)

4

1 回答 1

1

我找到了这个问题的答案:

我使用一个函数来查找每个登录的用户并使用每个登录用户的所有 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

我也在为班级做同样的事情。

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

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

于 2013-09-16T20:39:35.287 回答