以下情况:
#!/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将不存在。
提前致谢!
问候
的Stefan
编辑:找到答案!当我有时间记录所有内容时,会在下午发布。EDIT2:已发布答案;)
答案 0 :(得分: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
我也在为课程做同样的事情。
我仍然可以在每次登录时清理整个配置文件,并且还可以确保每个用户都可以使用自己的打印机。
希望这对遇到同样问题的每个人都有帮助(即使它只是整个打印机管理器的一小部分;)。