#!/usr/bin/env python3 # Copyright (C) 2013, Linnea Skogtvedt # Copyright (C) 2015-2017, Mike Gabriel # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # /etc/xdg/autostart/standardskriver.desktop eksempel: # [Desktop Entry] # Type=Application # Exec=standardskriver # Name=standardskriver # StartupNotify=false SITE_ID_FILE = '/etc/standardskriver.site' CFG_FILE = '/etc/standardskriver.cfg' CFG_FILE_EXAMPLE = '''[settings] enable = yes order = machine groups delete lpoptions = yes # MAC address or IP = printer # hostname = printer # hostname.domain = printer # LTSP client IP = printer # 10.1.0.0/16 = printer # (globbing works) [machine] 00:01:02:03:04:05 = printer01 172.16.34.64 = printer02 hostname = printer01 hostname.domain = printer02 # group name = printer # (globbing works) [groups] group1 = printer01 group2 = printer02 ''' from glob import glob from fnmatch import fnmatchcase import sys import os import subprocess import re from socket import gethostname, getfqdn import netaddr from optparse import OptionParser import configparser # if configured, check on what site location we are currently running... site_id = None if os.access(SITE_ID_FILE, os.R_OK): with open(SITE_ID_FILE, 'r') as c_id_f: # only read first line site_id = c_id_f.readline() # sanitize input... site_id = re.sub(r'([A-Z0-9]+)(.*\n)', r'\1', site_id) macaddrs = [open(a).read().replace(':', '').strip().lower() for a in glob('/sys/class/net/*/address')] macaddrs = [a for a in macaddrs if a] parser = OptionParser() parser.add_option('-n', '--dryrun', action='store_true', help='only show what would be done') options, args = parser.parse_args() if not os.path.exists(CFG_FILE): print('Configuration file %s is missing.' % CFG_FILE, file=sys.stderr) print('To create it, redirect the following example to %s and edit the file.' % CFG_FILE, file=sys.stderr) print(CFG_FILE_EXAMPLE) sys.exit(1) cfg = configparser.RawConfigParser() # hack: mac addrs contain :, which clashes with cfg syntax cfg.OPTCRE = re.compile( r'(?P