Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将CUPS打印机绑定到用户?_Python_Perl_Bash_Printing_Cups - Fatal编程技术网

Python 如何将CUPS打印机绑定到用户?

Python 如何将CUPS打印机绑定到用户?,python,perl,bash,printing,cups,Python,Perl,Bash,Printing,Cups,以下情况: 我们使用LDAP/GOSA管理用户及其打印机 我使用perl脚本从LDAP提取用户数据,并将其解析为yaml文件(在用户每次登录时) 我使用python脚本中解析的信息来配置cups打印机(在用户每次登录时) python脚本清理旧配置的打印机并配置新打印机。对于清理,我使用Bash脚本: 我的问题是,当我切换用户时,所有CUPS打印机都将重新配置。是否有功能将CUPS打印机绑定到特定用户,并且只清理属于该用户的打印机 例如: User1使用打印机dev1、dev2和dev3

以下情况:

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

我的问题是,当我切换用户时,所有CUPS打印机都将重新配置。是否有功能将CUPS打印机绑定到特定用户,并且只清理属于该用户的打印机

例如: User1使用打印机dev1、dev2和dev3登录。现在,他切换到一个新会话,与只有dev1打印机的User2进行会话。现在,两个用户的dev2和dev3都将被删除,切换回User1后,dev2和dev3将不存在

提前谢谢

问候

斯特凡

编辑:找到了答案!我会在下午的时候把它贴出来,那时我有时间记录所有的事情


编辑2:答案已发布;)

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

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

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

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


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

我找到了问题的答案:

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

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

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

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

#!/bin/bash

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