1

次の状況:

  • ユーザーとそのプリンターの管理に LDAP/GOSA を使用しています
  • Perl スクリプトを使用して LDAP からユーザー データを抽出し、それを解析して yaml ファイルにします (ユーザーのログインごとに)。
  • 解析された情報を python-script で使用して、(ユーザーがログインするたびに) カッププリンターを構成します。
  • python-script は、構成済みの古いプリンターをクリーンアップし、新しいプリンターを構成します。クリーニングには、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 に答える