tcos-configurator-1.23/0000755000000000000000000000000011771055762012010 5ustar tcos-configurator-1.23/Makefile.work0000644000000000000000000000137211771055762014434 0ustar VERSION=$(shell head -1 debian/changelog 2>/dev/null | awk '{gsub(/\(/,"",$$2); gsub(/\)/, "" , $$2); print $$2}' ) have_changelog := $(wildcard debian/changelog) ifeq ($(strip $(have_changelog)),) VERSION=$(shell head -1 ../debian/changelog 2>/dev/null | awk '{gsub(/\(/,"",$$2); gsub(/\)/, "" , $$2); print $$2}' ) endif all: #none clean: find -name "*~" | xargs rm -f rm -f ./dnsmasq.conf ./resolv.conf.real test: @echo "TCOS_CONFIGURATOR VERSION="$(VERSION) patch_version: # PATCHING VERSION sed -i 's/__VERSION__/$(VERSION)/g' tcos-configurator patch_max: patch_version sed -i -e 's/Configurar servidor TCOS/Configurar servidor MAX/g' po/es.po sed -i -e 's/Configurador del servidor TCOS/Configurador del servidor MAX/g' po/es.po .PHONY: tcos-configurator-1.23/debian/0000755000000000000000000000000011772323006013220 5ustar tcos-configurator-1.23/debian/control0000644000000000000000000000142311771055762014635 0ustar Source: tcos-configurator Section: gnome Priority: optional Maintainer: Mario Izquierdo (mariodebian) Build-Depends: debhelper (>= 7.0.50~), python (>= 2.6.6-3~) Standards-Version: 3.9.2 Vcs-Git: http://tcosproject.org/git/tcos-configurator.git Vcs-Browser: http://tcosproject.org/cgit/tcos-configurator.git/ Homepage: http://www.tcosproject.org Package: tcos-configurator Architecture: all Depends: tcosconfig, gksu, python, python-gtk2, python-glade2, python-netifaces, python-configobj, ${misc:Depends}, ${shlibs:Depends} Description: PyGTK tool to configure some needed services to get a TCOS server This tool configure dnsmasq or isc-dhcp-server to boot TCOS thin clients. . You can create users, configure autologin or launch TcosConfig too. tcos-configurator-1.23/debian/source/0000755000000000000000000000000011771055762014532 5ustar tcos-configurator-1.23/debian/source/format0000644000000000000000000000001511771055762015741 0ustar 3.0 (native) tcos-configurator-1.23/debian/changelog0000644000000000000000000001724111771055762015111 0ustar tcos-configurator (1.23) unstable; urgency=low * Update French translation (closes: #672865) Thanks to Julien Patriarca -- Mario Izquierdo (mariodebian) Fri, 22 Jun 2012 13:48:59 +0200 tcos-configurator (1.22) unstable; urgency=low * tcos-configurator.desktop: change gksu with su-to-root * debian/changelog: split a very long line * debian/control: - Add python to Depends - Use debhelper >=7.0.50 for dh7 package -- Mario Izquierdo (mariodebian) Wed, 07 Dec 2011 23:32:24 +0100 tcos-configurator (1.21) unstable; urgency=low * Promoted by "Antonio Pérez-Aranda " from Yaco Sistemas SL * Convert glade to gtkbuilder * tcos-configurator: Change glade to GtkBuilder and ask before overwriting files * setup.py: Install ui instead of glade * Update translations * Delete debian/py* files * Add man page * Switch to 3.0 (native) * Switch from CDBS to dh7 -- Mario Izquierdo (mariodebian) Mon, 21 Nov 2011 20:31:45 +0100 tcos-configurator (1.20) unstable; urgency=low * Add option 16 (swap-server) used by udhcpc * Makefile: Add Debian Squeeze * debian/copyright: Machine readable debian/copyright format * update debian/copyright * setu.py add license * tcos-configurator: fix combo_interface_change() nm iface detection * tcos-configurator: add --simulate option and don't write gateway if not needed -- Mario Izquierdo (mariodebian) Fri, 25 Feb 2011 22:40:56 +0100 tcos-configurator (1.19) unstable; urgency=low * check for /etc/gdm3 dir, schemas is moved to /usr/share/gdm * debian/control: Update GIT URL * tcos-configurator: Use /var/lib/max-netboot as TFTPBOOT if exists -- Mario Izquierdo (mariodebian) Sat, 18 Dec 2010 15:36:21 +0100 tcos-configurator (1.18) unstable; urgency=low * tcos-configurator: use bigger limits to allow more clients in GDM * Makefile: add jaunty karmic and lucid patch * setup.py: read version from debian/changelog to use in setup class * put option 49 xserver and 48 font-servers, and create /etc/gdm3/daemon.log * fix GDM_CONFIG var and add all xdmcp settings when enabling -- Mario Izquierdo (mariodebian) Thu, 17 Jun 2010 22:17:29 +0200 tcos-configurator (1.17) unstable; urgency=low * Use MaxSessions=30 as default for GDM * Create empty /etc/gdm/custom.conf if gdm.schemas is found -- Mario Izquierdo (mariodebian) Tue, 06 Apr 2010 17:41:20 +0200 tcos-configurator (1.16) unstable; urgency=low * support configuration of KDM, update Spanish translation -- Mario Izquierdo (mariodebian) Sun, 08 Nov 2009 14:49:55 +0100 tcos-configurator (1.15) unstable; urgency=low * fix exception when gateway is empty -- Mario Izquierdo (mariodebian) Sun, 04 Oct 2009 16:11:25 +0200 tcos-configurator (1.14) unstable; urgency=low * Remove obsolete patch targets * Add support for detcet Backharddi-NG -- Mario Izquierdo (mariodebian) Fri, 25 Sep 2009 23:52:06 +0200 tcos-configurator (1.13) unstable; urgency=low * Add support to configure dnsmasq daemon instead of dhcp3-server * Update translation template and Spanish translation * Update debian/copyright -- Mario Izquierdo (mariodebian) Wed, 02 Sep 2009 18:48:54 +0200 tcos-configurator (1.12) unstable; urgency=low * Fix lines error * Create users from 01 not 02 -- Mario Izquierdo (mariodebian) Wed, 02 Sep 2009 14:16:12 +0200 tcos-configurator (1.11) unstable; urgency=low * Remove obsolete popen2 module and use subprocess * Don't show interfaces in HIDDEN_INTERFACES var -- Mario Izquierdo (mariodebian) Mon, 01 Jun 2009 12:30:29 +0200 tcos-configurator (1.10) unstable; urgency=low * Add authorative in dhcpd.conf and remove some old and commented code -- Mario Izquierdo (mariodebian) Wed, 04 Mar 2009 20:52:43 +0100 tcos-configurator (1.9) unstable; urgency=low * Set ipname in /etc/hosts write loop -- Mario Izquierdo (mariodebian) Fri, 27 Feb 2009 14:43:52 +0100 tcos-configurator (1.8) unstable; urgency=low * Update Vcs- debian/control headers to new GIT repos * Add patch_lenny -- Mario Izquierdo (mariodebian) Sun, 15 Feb 2009 20:20:33 +0100 tcos-configurator (1.7) unstable; urgency=low * Update pt_BR translation * Set verbose compile translations -- Mario Izquierdo (mariodebian) Wed, 14 Jan 2009 20:13:01 +0100 tcos-configurator (1.6) unstable; urgency=low * debian/rules: - Move tcos-configurator to usr/sbin -- Mario Izquierdo (mariodebian) Tue, 14 Oct 2008 11:31:19 +0200 tcos-configurator (1.5) unstable; urgency=low * Now Depends on python-netifaces * Change ifaces detection code to use netifaces module * Hide como_boot_mode (and label) if only one method is found * Add patch_intrepid target -- Mario Izquierdo (mariodebian) Fri, 05 Sep 2008 15:09:52 +0200 tcos-configurator (1.4) unstable; urgency=low * Enable local exec if setup.py is found -- Mario Izquierdo (mariodebian) Wed, 06 Aug 2008 19:53:18 +0200 tcos-configurator (1.3) unstable; urgency=low * Add pt_BR translation, thanks to: Aécio dos Santos Pires -- Mario Izquierdo (mariodebian) Thu, 17 Jul 2008 16:29:52 +0200 tcos-configurator (1.2) unstable; urgency=low * tcos-configurator - Only save gateway if is in same network that server_ip - Read (using pwd) all usernames and create users from last old user created * Create link tcos-configurator.py (make pot need this .py files to extract translatable strings) * Makefile: - Create target clean -- Mario Izquierdo (mariodebian) Wed, 09 Jul 2008 15:56:37 +0200 tcos-configurator (1.1) unstable; urgency=low * First public upload (not only for MaX 4.0) * Load GDM settings when starts and populate checkboxes * Convert package to python-support, remove Makefile, add setup.py * Detect BackHarddi and don't show if not installed * Add another tab to launch TcosConfig * Add new Makefile to compile with tcos build system patches -- Mario Izquierdo (mariodebian) Fri, 04 Jul 2008 11:59:51 +0200 tcos-configurator (1.0.max5) max; urgency=low * Use only 1 dns server in dhcpd.conf * Show dynamic IP if not static found * Use ifdown/ifup to reconfigure network (add 2 sec of pause between them) * Use 'route' instead of 'ip route' to get gateway * Add gdm var: [security]AllowRemoteAutoLogin=true -- Mario Izquierdo (mariodebian) Mon, 23 Jun 2008 18:03:35 +0200 tcos-configurator (1.0.max4) max; urgency=low * Fix detection and configuration of static IP * Less header border size 20 => 0 -- Mario Izquierdo (mariodebian) Sun, 13 Apr 2008 23:43:07 +0200 tcos-configurator (1.0.max3) max; urgency=low * GDMCONF, search for gdm-cdd.conf and use if found -- Mario Izquierdo (mariodebian) Sun, 13 Apr 2008 13:58:44 +0200 tcos-configurator (1.0.max2) max; urgency=low * Change gksu => gksudo * Install locales * Show install debug -- Mario Izquierdo (mariodebian) Sat, 05 Apr 2008 23:03:57 +0200 tcos-configurator (1.0.max1) max; urgency=low * First version -- Mario Izquierdo (mariodebian) Sat, 05 Apr 2008 17:55:30 +0200 tcos-configurator-1.23/debian/compat0000644000000000000000000000000211771055762014430 0ustar 7 tcos-configurator-1.23/debian/rules0000755000000000000000000000021611771055762014311 0ustar #!/usr/bin/make -f %: dh $@ --with python2 override_dh_auto_clean: dh_auto_clean cd po && make clean .PHONY: override_dh_auto_clean tcos-configurator-1.23/debian/copyright0000644000000000000000000000214611771055762015170 0ustar Format: http://dep.debian.net/deps/dep5 Upstream-Name: tcos-configurator Source: http://tcosproject.org/cgit/tcos-configurator.git Files: * Copyright: 2008-2011 Mario Izquierdo (mariodebian) License: GPL-2.0+ Files: debian/* Copyright: 2008-2011 Mario Izquierdo (mariodebian) License: GPL-2.0+ License: GPL-2.0+ This package 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 package 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, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". tcos-configurator-1.23/tcos-configurator.ui0000644000000000000000000025075211771055762016032 0ustar 40 1 1 1 1 1 61 0 1 1 1 10 10 True TCOS Server configurator GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True False False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True True True False 5 True False 0 0 True True True <span size="x-large">Configure TCOS server</span> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True True True True True GTK_POS_TOP False False 10 True 9 2 False 10 10 True DHCP net interface False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True False True True 1 2 0 1 fill fill True Start IP False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 3 4 fill True True True True 0 True False 1 2 3 4 True End IP False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True True True True 0 True False 1 2 4 5 lbl_dhcp False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 5 PANGO_ELLIPSIZE_NONE -1 False 0 0 2 7 8 fill True False True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-apply 4 0.5 0.5 0 0 0 False False True Commit changes True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 1 2 8 9 fill True Boot mode False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 6 7 fill True False True True 1 2 6 7 fill fill True Server IP False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True True True True 0 True False 1 2 1 2 True 0 True WARNING: <b>Detected dynamic IP</b> False True GTK_JUSTIFY_CENTER False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True configure this IP as static (disable NetworkManager) True GTK_RELIEF_NORMAL True False False True 0 False False 0 2 2 3 expand|shrink|fill True True True True 0 host True False 1 2 5 6 True False 10 True Hostname prefix False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True GTK_RELIEF_NORMAL True True gtk-dialog-question 4 0.5 0.5 0 0 0 False False 0 1 5 6 fill fill False True True DHCP server False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 10 True 6 2 False 10 5 True Numer of users to create False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Prefix False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill lbl_users False True GTK_JUSTIFY_LEFT False False 0.5 0.5 10 10 PANGO_ELLIPSIZE_NONE -1 False 0 0 2 4 5 fill True Groups to add users (use spaces to separate) (default fuse) False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 3 4 fill True True True GTK_POS_LEFT 0 GTK_UPDATE_DISCONTINUOUS False adjustment1 1 2 0 1 expand|shrink|fill fill True True True True 0 user True False 1 2 1 2 expand|shrink|fill True True True True 0 fuse True False 1 2 3 4 expand|shrink|fill True False True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-apply 4 0.5 0.5 0 0 0 False False True Commit changes True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 1 2 5 6 expand|shrink|fill True <b>Passwords are same string as username</b> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 5 PANGO_ELLIPSIZE_NONE -1 False 0 0 2 2 3 fill False True True Remote users False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 True False 0 10 True 5 2 True 10 10 True False True enable autologin True GTK_RELIEF_NORMAL True False False True 1 2 1 2 True Autologin timeout (in seconds) False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True False True True GTK_POS_LEFT 0 GTK_UPDATE_CONTINUOUS False adjustment2 1 2 2 3 fill fill True Remote login (required for TCOS) False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True True enable remote login True GTK_RELIEF_NORMAL True False False True 1 2 0 1 fill True False True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-apply 4 0.5 0.5 0 0 0 False False True Commit changes True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 1 2 4 5 fill lbl_login False False GTK_JUSTIFY_LEFT True False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 2 3 4 fill True True 0 True Autologin False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True GTK_RELIEF_NORMAL True True gtk-dialog-question 4 0.5 0.5 0 0 0 False False 0 1 1 2 fill fill 0 True True False True True Login manager False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 True 3 1 False 0 0 20 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-go-forward 4 0.5 0.5 0 0 0 False False True Launch TcosConfig True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 1 1 2 True TcosConfig is a tool to generate TCOS network boot images. The images are downloaded using PXE protocol. You can add or remove some tools in images and configure a lot of hardware settings. False False GTK_JUSTIFY_LEFT True False 0.5 0.5 0 40 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 False True True Boot images False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 True True 5 True GTK_BUTTONBOX_END 20 True True True gtk-quit True GTK_RELIEF_NORMAL True 0 False True Autologin help GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True True True True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False 20 True False 10 True <b>TCOS Autologin</b> False True GTK_JUSTIFY_LEFT True False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True TCOS can work in kiosk mode. All you need is to configure the hostnames with the <b><u>same</u></b> value as usernames. Example: False True GTK_JUSTIFY_LEFT True False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True <b>Users:</b> from user01 to user15 <b>Hostnames:</b> from user01 to user15 False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True <b>1.-</b> Create users with tcos-configurator <b>2.-</b> Configure DHCP with a 15 IP's range (or more) <b>3.-</b> Edit <b>/etc/hosts</b> and add this: False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True 192.168.0.101 user01 192.168.0.102 user02 192.168.0.103 user03 ... 192.168.0.115 user15 False False GTK_JUSTIFY_LEFT False False 0 0.5 50 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False tcos-configurator-1.23/tcos-configurator.10000644000000000000000000000140611771055762015543 0ustar .TH tcos-configurator 1 "Mar 21, 2011" "tcos-configurator man page" .SH NAME tcos-configurator \- Python GTK2 gui that configure DHCP TFTP and DNS cache for TCOS. .SH DESCRIPTION .PP \fBtcos-configurator\fP is a python GUI with configure following daemons : * dnsmasq (as TFTP + DHCP + cache DNS) * isc-dhcp-server (as DHCP server). * GDM/KDM autologin * Create users .SH OPTIONS .B [no options] With no options will run in normal mode. .B --help Some usage help about tcosmonitor .B --debug Show verbose output when running .B --simulate Dry run, don't change files .SH BUGS Contact Mario Izquierdo Homepage: http://www.tcosproject.org .SH SEE ALSO tcosmonitor(1) .SH AUTHOR Mario Izquierdo (mariodebian) tcos-configurator-1.23/tcos-configurator0000755000000000000000000013303111771055762015407 0ustar #!/usr/bin/python # -*- coding: UTF-8 -*- # TcosConfigurator version __VERSION__ # # Copyright (c) 2006-2011 Mario Izquierdo # # This package 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 package 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. import sys import os import glob # for get_ip_address import socket import fcntl import struct import netifaces ##################### import pygtk pygtk.require('2.0') from gtk import * import gtk.glade import time import getopt from gettext import gettext as _ from gettext import bindtextdomain, textdomain from locale import setlocale, LC_ALL from subprocess import Popen, PIPE, STDOUT from threading import Thread import netifaces import pwd import gobject #import threading gtk.gdk.threads_init() gobject.threads_init() ######################################################## # # Extends python-configobj this class use '=' instead of ' = ' # ######################################################## from configobj import ConfigObj class MyConfigObj (ConfigObj): def _write_line(self, indent_string, entry, this_entry, comment): """Write an individual line, for the write method""" # NOTE: the calls to self._quote here handles non-StringType values. if not self.unrepr: val = self._decode_element(self._quote(this_entry)) else: val = repr(this_entry) return '%s%s%s%s%s' % ( indent_string, self._decode_element(self._quote(entry, multiline=False)), self._a_to_u('='), val, self._decode_element(comment)) ############################################################# debug=False SIMULATE=False PACKAGE="tcos-configurator" # if exec from svn or sources dir if os.path.isfile('./setup.py'): LOCALE_DIR = "./po/" UI_DIR = "./" IMG_DIR = "./images/" print "exec in sources dir" else: UI_DIR = "/usr/share/tcos-configurator/" IMG_DIR = "/usr/share/tcos-configurator/images/" LOCALE_DIR = "/usr/share/locale/" def print_debug(txt): if debug: print >> sys.stderr, "%s::%s" %("tcos-configurator", txt) return def usage(): print "tcos-configurator help:" print "" print " tcos-configurator -d [--debug] (write debug data to stdout)" print " tcos-configurator -s [--simulate] (dry-run)" print " tcos-configurator -h [--help] (this help)" try: opts, args = getopt.getopt(sys.argv[1:], ":hds", ["help", "debug", "simulate"]) except getopt.error, msg: print msg print "for command line options use tcosconfig --help" sys.exit(2) # process options for o, a in opts: if o in ("-d", "--debug"): print "DEBUG ACTIVE" debug = True if o in ("-s", "--simulate"): print "SIMULATE" SIMULATE = True if o in ("-h", "--help"): usage() sys.exit() ################################################################################ DHCP_CONF=[ ['# dhcpd.conf',"# generated by __PROGRAM__ on date __DATE__"] , ['ddns-update-style ad-hoc;', 'option subnet-mask __MASK__;', '#option domain-name "tcos-domain.org";', '# set authorative to be first providing DHCP lease', 'authorative;', 'option option-128 code 128 = string;', 'option option-129 code 129 = text;', 'get-lease-hostnames true;', ], ['shared-network TCOS {', "\t\tsubnet __NET__ netmask __MASK__ {", "\t\toption domain-name-servers __DNS__;", "\t\toption broadcast-address __BROADCAST__;", "\t\toption routers __ROUTERS__;", "\t\tnext-server __SERVERIP__;", "\t\trange dynamic-bootp __STARTIP__ __ENDIP__;", "\t\tfilename \"__BOOTMODE__\";", "\t}", "}" ], ] TFTPBOOT="/var/lib/tftpboot" if os.path.isdir("/var/lib/max-netboot"): TFTPBOOT="/var/lib/max-netboot" DNSMASQ_CONF=[ ['# dnsmasq.conf for TCOS', '# file generated by __PROGRAM__ on date __DATE__\n'], ['## put your ISP DNS server in this file', 'resolv-file=/etc/resolv.conf.real\n'], ['listen-address=__SERVERIP__,127.0.0.1\n', 'dhcp-range=__STARTIP__,__ENDIP__,12h\n', 'dhcp-option=option:router,__ROUTERS__', 'dhcp-option=option:tftp-server,__SERVERIP__', 'dhcp-boot=__BOOTMODE__,__SERVERIP__,__SERVERIP__\n\n', '# option 49 x-display-manager', 'dhcp-option-force=49,__SERVERIP__', '# option 48 font-servers', 'dhcp-option-force=48,__SERVERIP__', '# option 16 swap-server', 'dhcp-option-force=16,__SERVERIP__\n\n', ], ['enable-tftp', 'tftp-root=%s'%TFTPBOOT, ], ['dhcp-authoritative\n\n', '## uncomment this for DHCP debug', '#log-dhcp', '## uncomment this for DNS querys debug', '#log-queries\n\n', '## example reserved lease', '#dhcp-host=00:11:22:33:44:55,192.168.0.101'], ] # this settings could be more precise but work for # 15-20 thin clients without problems #Enable=true #MaxSessions=40 #MaxPending=60 #MaxPendingIndirect=30 #MaxWait=75 #MaxWaitIndirect=80 #PingIntervalSeconds=35 #DisplaysPerHost=4 GDM_CONFIG={ "xdmcp": {"Enable":"true", "MaxSessions":"30", "MaxSessions":"40", "MaxPending":"60", "MaxPendingIndirect":"30", "MaxWait":"75", "MaxWaitIndirect":"80", "PingIntervalSeconds":"35", "DisplaysPerHost":"4"}, "security": {"AllowRemoteAutoLogin":"true", "DisallowTCP":"false"}, "daemon": {"TimedLoginEnable":"__AUTOLOGIN__", "TimedLogin":"/usr/sbin/tcos-gdm-autologin|", "TimedLoginDelay":"__TIMEOUT__"}, } GDM_CONF_FILE="/etc/gdm/gdm.conf" # try to edit correct file (Ubuntu use -custom file) if os.path.isfile(GDM_CONF_FILE + "-custom"): GDM_CONF_FILE=GDM_CONF_FILE+"-custom" if os.path.isfile("/etc/gdm/gdm-cdd.conf"): GDM_CONF_FILE="/etc/gdm/gdm-cdd.conf" # in new Ubuntu create empty file and use it if os.path.isfile("/etc/gdm/gdm.schemas") and not os.path.isfile("/etc/gdm/custom.conf"): # create empty file f=open("/etc/gdm/custom.conf", 'w') f.write('\n') f.close() # new GDM in Ubuntu Karmic if os.path.isfile("/etc/gdm/custom.conf"): GDM_CONF_FILE="/etc/gdm/custom.conf" # in Debian unstable GDM is installed in /etc/gdm3 create empty file and use it if os.path.isdir("/etc/gdm3") and not os.path.isfile("/etc/gdm3/daemon.conf"): # create empty file f=open("/etc/gdm3/daemon.conf", 'w') f.write('\n') f.close() # new GDM in Debian unstable if os.path.isfile("/etc/gdm3/daemon.conf"): GDM_CONF_FILE="/etc/gdm3/daemon.conf" KDM_CONFIG={ "Xdmcp":[ {"Enable":"true"} ] } KDM_CONF_FILE="/etc/kde4/kdm/kdmrc" KDM_ACCESS_FILE="/etc/kde4/kdm/Xaccess" KDM_ACCESS_LINE="#any host can get a login window" HIDDEN_INTERFACES=['lo', 'pan0', 'sit0'] DNSMASQ_FILE="/etc/dnsmasq.conf" NETWORK_INTERFACES="/etc/network/interfaces" RESOLV_CONF_REAL="/etc/resolv.conf.real" if SIMULATE: GDM_CONF_FILE="./" + os.path.basename(GDM_CONF_FILE) DNSMASQ_FILE="./dnsmasq.conf" NETWORK_INTERFACES="./interfaces" RESOLV_CONF_REAL="./resolv.conf.real" ################################################################################ class TcosStandalone: def __init__(self): print_debug("__init__()") # vars self.v={} self.begin_usernumber=1 gtk.glade.bindtextdomain(PACKAGE, LOCALE_DIR) gtk.glade.textdomain(PACKAGE) # gettext support setlocale( LC_ALL ) bindtextdomain( PACKAGE, LOCALE_DIR ) textdomain( PACKAGE ) if os.path.isdir('/usr/share/backharddi') or os.path.isdir('/usr/share/backharddi-ng'): self.BOOT_MODES=[ [_("TCOS and Backharddi"), "/pxelinux.0" ], [_("TCOS"), "/tcos/pxelinux.0" ], [_("Backharddi"), "/backharddi/pxelinux.0"], ] else: self.BOOT_MODES=[ [_("TCOS"), "/tcos/pxelinux.0" ] ] # Widgets self.ui = gtk.Builder() self.ui.set_translation_domain(PACKAGE) self.ui.add_from_file(UI_DIR + 'tcos-configurator.ui') self.mainwindow = self.ui.get_object('mainwindow') self.mainwindow.set_icon_from_file(IMG_DIR +'tcos-icon-32x32.png') # close windows signals self.mainwindow.connect('destroy', self.quitapp ) self.mainwindow.connect('delete_event', self.quitapp) self.button_quit=self.ui.get_object("btn_quit") self.button_quit.connect('clicked', self.quitapp) self.window_autologin_help=self.ui.get_object('window_autologin_help') self.window_autologin_help.set_icon_from_file(IMG_DIR +'tcos-icon-32x32.png') self.window_autologin_help.connect('destroy', self.hidehelp ) self.window_autologin_help.connect('delete_event', self.hidehelp) # widgets self.w={} for widget in ['img_logo', 'combo_interfaces', 'txt_serverip', 'txt_startip', 'txt_endip', 'btn_configure_dhcp', 'combo_boot_mode', 'hbox_dynamic', 'ck_static', 'btn_hostname_help', 'txt_hostname_prefix', 'lbl_dhcp', 'label_boot_mode']: self.w[widget]=self.ui.get_object(widget) self.w['lbl_dhcp'].set_text("") self.w['img_logo'].set_from_file(IMG_DIR + 'tcos-logo.png') self.w['combo_interfaces'].connect('changed', self.combo_interface_change ) self.w['btn_configure_dhcp'].connect('clicked', self.on_btn_configure_dhcp) self.w['txt_serverip'].connect('focus-out-event', self.on_serverip_blur ) self.w['btn_hostname_help'].connect('clicked', self.on_btn_autologin_help) self.populate_select(self.w['combo_boot_mode'], self.BOOT_MODES) self.set_active_in_select(self.w['combo_boot_mode'], self.BOOT_MODES[0][0]) if len(self.BOOT_MODES) < 2: self.w['combo_boot_mode'].hide() self.w['label_boot_mode'].hide() self.interfaces=self.getNetInterfaces() self.configured_interfaces=self.read_etc_network_interfaces() print_debug("self.configured_interfaces=%s len=%s"%(self.configured_interfaces, len(self.configured_interfaces))) self.populate_select(self.w['combo_interfaces'], self.interfaces ) if len(self.interfaces) == 1: self.set_active_in_select(self.w['combo_interfaces'], self.interfaces[0][0]) for widget in ['txt_serverip', 'txt_startip', 'txt_endip', 'combo_boot_mode']: self.w[widget].connect('changed', self.set_dhcp_modified) if len(self.configured_interfaces) < 2: self.w['hbox_dynamic'].show() self.dhcp_modified=False print_debug("configured_interfaces %s"%self.configured_interfaces) print_debug("detected_interfaces %s"%self.interfaces) # users for widget in ['scale_number_users', 'txt_prefix', 'txt_groups', 'lbl_users', 'btn_commit_users']: self.w[widget]=self.ui.get_object(widget) self.w['txt_prefix'].connect('changed', self.on_scale_number_users) self.w['scale_number_users'].connect('value_changed', self.on_scale_number_users) self.on_scale_number_users(self.w['scale_number_users']) self.w['btn_commit_users'].set_sensitive(False) self.w['btn_commit_users'].connect('clicked', self.on_btn_commit_users) # remote login for widget in ['ck_remotelogin', 'ck_autologin', 'scale_autologin', 'btn_commit_login', 'btn_autologin_help', 'lbl_login', 'btn_launch_tcosconfig']: self.w[widget]=self.ui.get_object(widget) # read GDM_CONF_FILE config=MyConfigObj( GDM_CONF_FILE ) try: if config['xdmcp']['Enable'] == 'true': self.w['ck_remotelogin'].set_active(True) except: pass try: if config['daemon']['TimedLogin'] == '/usr/sbin/tcos-gdm-autologin|': self.w['ck_autologin'].set_active(True) except: pass try: if config['daemon']['TimedLoginDelay'] != '10': self.w['scale_autologin'].set_value( int(config['daemon']['TimedLoginDelay']) ) except: pass self.w['ck_remotelogin'].connect('toggled', self.on_ck_remotelogin) self.w['ck_autologin'].connect('toggled', self.on_ck_remotelogin) self.w['scale_autologin'].connect('value_changed', self.on_ck_remotelogin) self.w['btn_commit_login'].connect('clicked', self.on_btn_commit_login) self.w['btn_autologin_help'].connect('clicked', self.on_btn_autologin_help) self.w['btn_launch_tcosconfig'].connect('clicked', self.on_btn_launch_tcosconfig) def read_mayor_generated_users(self, prefix): if prefix == '': return tmpusers=[] maxu=0 # read generated users for user in pwd.getpwall(): if user[0].startswith(prefix): u=user[0].replace(prefix,'') try: i=int(u) if i> maxu: maxu=i except: pass self.begin_usernumber=maxu+1 print_debug("read_mayor_generated_users() begin=%s"%self.begin_usernumber) return "%02d"%maxu def on_serverip_blur(self, widget, event): value=widget.get_text() if value == "": return self.w['txt_startip'].set_text(".".join(value.split('.')[0:3]) + ".101") self.w['txt_endip'].set_text( ".".join(value.split('.')[0:3]) + ".131") self.w['lbl_dhcp'].set_text("") def get_ip_from_iface(self, seliface): print_debug("get_ip_from_iface(%s) self.configured_interfaces=%s"%(seliface, self.configured_interfaces)) if not self.configured_interfaces.has_key(seliface): return None if not self.configured_interfaces[seliface].has_key('address'): return None return self.configured_interfaces[seliface]['address'] def combo_interface_change(self, widget): configured=False seliface=self.read_select_value(widget) for iface in self.interfaces: if iface[0] != seliface: #print_debug("combo_interface_change(%s) iface(%s) != seliface and iface != None"%(seliface, iface[0])) continue iface_ip=self.get_ip_from_iface(iface[0]) print_debug("combo_interface_change(%s) static iface=%s seliface=%s iface_ip=%s"%(seliface, iface, seliface, iface_ip)) print_debug("combo_interface_change(%s) self.interfaces=%s"%(seliface, self.interfaces)) print_debug("combo_interface_change() iface[1]=%s iface_ip=%s"%(iface[1], iface_ip)) if iface_ip: self.w['lbl_dhcp'].hide() self.w['hbox_dynamic'].hide() self.w['ck_static'].set_active(False) print_debug("combo_interface_change(%s) iface=%s HAVE IP"%(seliface, iface) ) else: self.w['hbox_dynamic'].show() self.w['ck_static'].set_active(True) self.w['lbl_dhcp'].set_markup( _("WARNING:\nNetwork interface don't have IP") ) self.w['lbl_dhcp'].show() self.w['txt_serverip'].set_text('') self.w['txt_startip'].set_text('') self.w['txt_endip'].set_text('') print_debug("combo_interface_change(%s) iface=%s DON'T HAVE IP" %(seliface, iface) ) if iface[1]: self.w['txt_startip'].set_text(".".join(iface[1].split('.')[0:3]) + ".101") self.w['txt_endip'].set_text( ".".join(iface[1].split('.')[0:3]) + ".131") self.w['txt_serverip'].set_text(iface[1]) self.set_dhcp_modified() def set_dhcp_modified(self, *args): self.dhcp_modified=True self.w['btn_configure_dhcp'].set_sensitive(True) def on_btn_configure_dhcp(self, *args): if os.path.isfile('/usr/sbin/dnsmasq'): if not self.ask_msg( _("Your %s file will be overwritten.\n\nContinue?") %"/etc/dnsmasq.conf" ): return th=Thread(target=self.configureDNSMASQ) th.start() else: if not self.ask_msg( _("Your %s file will be overwritten.\n\nContinue?") %"/etc/dhcp3/dhcpd.conf" ): return th=Thread(target=self.configureDHCP) th.start() def hidehelp(self, *args): self.window_autologin_help.hide() return True def on_btn_autologin_help(self, widget): self.window_autologin_help.show() ############## login ####################################################### def on_ck_remotelogin(self, widget): if self.w['ck_remotelogin'].get_active(): self.w['ck_autologin'].set_sensitive(True) self.w['scale_autologin'].set_sensitive(True) else: self.w['ck_autologin'].set_sensitive(False) self.w['scale_autologin'].set_sensitive(False) self.w['btn_commit_login'].set_sensitive(True) def on_btn_commit_login(self, widget): if self.w['ck_remotelogin'].get_active(): self.enable_remotelogin() else: self.disable_remotelogin() self.w['btn_commit_login'].set_sensitive(False) def enable_remotelogin(self): if os.path.isfile(GDM_CONF_FILE): self.SetVar("xdmcp", "Enable", "true") for gdmvar in GDM_CONFIG['xdmcp']: self.SetVar('xdmcp', gdmvar, GDM_CONFIG['xdmcp'][gdmvar]) if os.path.exists("/usr/lib/gdm/gdmgreeter"): self.SetVar("daemon", "RemoteGreeter", "/usr/lib/gdm/gdmgreeter") self.SetVar("daemon", "TimedLogin", "/usr/sbin/tcos-gdm-autologin|") if self.w['ck_autologin'].get_active(): self.SetVar("daemon", "TimedLoginEnable", "true") self.SetVar("security", "AllowRemoteAutoLogin", "true") else: self.SetVar("daemon", "TimedLoginEnable", "false") self.SetVar("security", "AllowRemoteAutoLogin", "false") self.SetVar("daemon", "TimedLoginDelay", str( int(self.w['scale_autologin'].get_value()) ) ) if os.path.isfile(KDM_CONF_FILE): self.SetVar("Xdmcp", "Enable", "true", CONF=KDM_CONF_FILE) # configure Xaccess f=open(KDM_ACCESS_FILE, 'r') data=f.readlines() f.close() for i in range(len(data)): line=data[i] if KDM_ACCESS_LINE in line: data[i]=line.replace('#*', '*') f=open(KDM_ACCESS_FILE, 'w') for line in data: print_debug("enable_remotelogin() KDM_ACCESS_FILE: %s"%line.replace('\n','') ) f.write(line) f.close() # show message to reboot required self.w['lbl_login'].set_markup( _("Reboot required (or restart gdm/kdm daemon) to enable new GDM/KDM settings") ) self.w['lbl_login'].show() return def disable_remotelogin(self): if os.path.isfile(KDM_CONF_FILE): self.SetVar("Xdmcp", "Enable", "false", CONF=KDM_CONF_FILE) self.SetVar("xdmcp","Enable","false") def SetVar(self, section, key, value, do=True, CONF=GDM_CONF_FILE): if not do: print_debug("NOACTION: SetVar() gdm.conf=%s section=%s key=%s value=%s" %(CONF, section,key,value) ) return config=MyConfigObj( os.path.realpath(CONF) ) print_debug("setting conf=%s section=[%s] key=%s value=%s" %(CONF, section, key, value) ) if not config.has_key(section): config[section]={} config[section][key] = value try: config.write() return True except: print_debug("Error, can't write in %s" %(CONF)) return False ############## users ########################################################## def on_scale_number_users(self, widget): num=int(self.w['scale_number_users'].get_value()) prefix=self.w['txt_prefix'].get_text() if prefix=='': self.w['btn_commit_users'].set_sensitive(False) return self.read_mayor_generated_users(prefix) init=self.begin_usernumber end=self.begin_usernumber+num self.w['lbl_users'].set_text(_("Creating from %(prefix)s%(init)02d to %(prefix)s%(end)02d") %{"prefix":prefix, "init":init, "end":end} ) self.w['lbl_users'].show() self.w['btn_commit_users'].set_sensitive(True) def on_btn_commit_users(self, widget): th=Thread(target=self.createUsers) th.start() def userExists(self, username): try: pwd.getpwnam(username) return True except: return False def createUsers(self): number=int(self.w['scale_number_users'].get_value()) user_prefix=self.w['txt_prefix'].get_text() groups=self.w['txt_groups'].get_text() gtk.gdk.threads_enter() self.w['btn_commit_users'].set_sensitive(False) self.w['lbl_users'].set_text("") gtk.gdk.threads_leave() for i in range(self.begin_usernumber, self.begin_usernumber+number): # range starts in 1 i="%02d"%(i) username="%s%s"%(user_prefix, i) if not self.userExists(username): print_debug("Creating username %s"%username) gtk.gdk.threads_enter() self.w['lbl_users'].set_text( _("Creating user: '%s'") %username ) gtk.gdk.threads_leave() self.exe_cmd("useradd -m %s -p%s -s /bin/bash -d /home/%s" %(username, username, username)) self.exe_cmd("echo %s:%s | chpasswd" %(username, username)) self.exe_cmd("adduser %s fuse" %(username) ) else: print_debug("User already exists: %s"%username) gtk.gdk.threads_enter() self.w['lbl_users'].set_text( _("User already exists: '%s'") %username ) gtk.gdk.threads_leave() time.sleep(1) self.read_mayor_generated_users(user_prefix) gtk.gdk.threads_enter() self.w['lbl_users'].set_markup( _("Done") ) gtk.gdk.threads_leave() ######################network ########################################## def get_ip_address(self, ifname): print_debug("get_ip_address() ifname=%s" %(ifname) ) if not ifname in netifaces.interfaces(): return None ip=netifaces.ifaddresses(ifname) if ip.has_key(netifaces.AF_INET): print_debug("get_ip_address(%s)=%s"%(ifname, ip[netifaces.AF_INET][0])) return ip[netifaces.AF_INET][0]['addr'] return None def getNetInterfaces(self): interfaces=[] for dev in netifaces.interfaces(): if not dev in HIDDEN_INTERFACES and not dev.startswith("vbox") and not dev.startswith("vmnet") and not dev.startswith("wmaster"): ip=self.get_ip_address(dev) print_debug("getNetInterfaces() iface=%s data=%s"%(dev,ip)) interfaces.append( [dev, ip] ) return interfaces def read_etc_network_interfaces(self): interfaces={} curiface=None try: f=open(NETWORK_INTERFACES,'r') except: print_debug("Error, can't read " + NETWORK_INTERFACES) return interfaces data=f.readlines() f.close() for line in data: line=line.strip() if len(line) == 0: continue if line.startswith('#'): continue if line.startswith("iface"): curiface=line.split()[1] interfaces[curiface]={} if curiface and line.startswith('address'): interfaces[curiface]['address']=line.split()[1] if curiface and line.startswith('netmask'): interfaces[curiface]['netmask']=line.split()[1] if curiface and line.startswith('gateway'): interfaces[curiface]['gateway']=line.split()[1] if curiface and line.startswith('network'): interfaces[curiface]['network']=line.split()[1] if curiface and line.startswith('broadcast'): interfaces[curiface]['broadcast']=line.split()[1] if curiface and line.startswith('dns-nameservers'): interfaces[curiface]['dns-nameservers']=line.split()[1:] print_debug("read_etc_network_interfaces() %s"%interfaces) return interfaces def configure_static(self, data): print_debug("configure_static() data=%s"%data) newdata=[] curiface=None added=False try: f=open(NETWORK_INTERFACES,'r') except: print_debug("Error, can't read "+NETWORK_INTERFACES) return False ifile=f.readlines() f.close() for line in ifile: sline=line.strip() if sline.startswith('iface'): curiface=sline.split()[1] if not added and curiface and curiface == data['iface']: newdata.append("# added by tcos-configurator") newdata.append("auto %s" %curiface) newdata.append("iface %s inet static" %curiface) for opt in data: if opt == 'iface': continue #if opt == 'gateway': continue newdata.append("\t%s %s" %(opt, data[opt]) ) newdata.append("\n\n") added=True if added and curiface == data['iface']: continue if (sline.startswith('auto') or sline.startswith('allow') ) and sline.split()[1] == data['iface']: continue newdata.append(line.replace('\n','') ) if not added: newdata.append("\n#added by tcos-configurator") newdata.append("auto %s"%data['iface']) newdata.append("iface %s inet static"%data['iface']) newdata.append("\taddress %s"%data['address']) newdata.append("\tnetmask %s"%data['netmask']) if data['gateway'] and ".".join(data['gateway'].split('.')[0:3]) == ".".join(data['address'].split('.')[0:3]): # only save gateway if is in the same network newdata.append("\tgateway %s"%data['gateway']) newdata.append("\n\n") print_debug(newdata) try: f=open(NETWORK_INTERFACES, 'w') except: return False for line in newdata: f.write(line + "\n") f.close() return True ################### combo stuff ############################## def populate_select(self, widget, values): valuelist = gtk.ListStore(str) for value in values: valuelist.append([value[0]]) widget.set_model(valuelist) #widget.set_text_column(0) if widget.get_text_column() != 0: widget.set_text_column(0) model=widget.get_model() return def set_active_in_select(self, widget, default): model=widget.get_model() for i in range(len(model)): if model[i][0] == default: print_debug ("set_active_in_select() default is '%s', index %d" %( model[i][0] , i ) ) widget.set_active(i) return def read_select_value(self, widget): selected=-1 try: selected=widget.get_active() except: print_debug ( "read_select() ERROR reading " ) model=widget.get_model() value=model[selected][0] print_debug ( "read_select() reading %s" %(value) ) return value ################################################################################ def parse_dhcp(self, line, options): for option in options: print_debug("line %s replace %s with %s"%(line, option, options[option])) line=line.replace(option, options[option]) print_debug(line) return line def write_into_etc_host(self, newline, noaction=False): ip=newline[0] hostname=newline[1] # check if exists f=open("/etc/hosts", "r") data=f.readlines() f.close() for line in data: line=line.replace('\n','') if ip + " " in line or ip + '\t' in line: print_debug ( "IP %s is in /etc/hosts" %(ip) ) return True try: print_debug ("Adding %s %s" %(ip, hostname) ) if noaction: print_debug("NOACTION: AddHost() hostname=%s, ip=%s" %(hostname,ip) ) else: f=open("/etc/hosts", "a") f.write("%s\t%s\n" %(ip, hostname) ) f.close() return True except Exception, err: print "Error '%s' editting /etc/hosts, are you root?"%err return False def configureDNSMASQ(self, *args): # get data gtk.gdk.threads_enter() self.w['btn_configure_dhcp'].set_sensitive(False) self.w['lbl_dhcp'].set_text( _("Configuring DNSMASQ service...") ) self.w['lbl_dhcp'].show() gtk.gdk.threads_leave() boot_mode=self.read_select_value(self.w['combo_boot_mode']) boot_filename="/pxelinux.0" for boot in self.BOOT_MODES: print_debug("boot[0]=%s boot_mode=%s"%(boot[0], boot_mode) ) if boot[0] == boot_mode: boot_filename=boot[1] print_debug("configureDNSMASQ() setting boot filename to %s"%boot_filename) # get server_ip false_gateway=False server_iface=self.read_select_value(self.w['combo_interfaces']) if self.configured_interfaces.has_key(server_iface) and len(self.configured_interfaces[server_iface]) > 1: server_ip=self.configured_interfaces[server_iface]['address'] try: gateway=self.configured_interfaces[server_iface]['gateway'] except: gateway=server_ip netmask=self.configured_interfaces[server_iface]['netmask'] if self.configured_interfaces[server_iface].has_key('network'): network=self.configured_interfaces[server_iface]['network'] else: network=".".join( server_ip.split('.')[0:-1]) + ".0" if self.configured_interfaces[server_iface].has_key('broadcast'): broadcast=self.configured_interfaces[server_iface]['broadcast'] else: broadcast=".".join( server_ip.split('.')[0:-1]) + ".255" else: print_debug("configureDNSMASQ() dynamic IP") server_ip=None for interface in self.interfaces: if interface[0] == server_iface: server_ip=interface[1] if self.w['txt_serverip'].get_text() != '': server_ip=self.w['txt_serverip'].get_text() # gateway #gateway=self.exe_cmd("ip route| grep %s| awk '/^default/ {print $3}'"%server_iface) gateway=self.exe_cmd("/sbin/route -n| awk '/^0.0.0.0(.*)%s/ {print $2}'| head -1" %server_iface) if gateway == [] or gateway == "": print_debug("gateway not found, using server_ip") gateway=server_ip false_gateway=True else: print_debug("FOUNG gateway =%s"%gateway) false_gateway=False broadcast=".".join( server_ip.split('.')[0:-1]) + ".255" netmask="255.255.255.0" network=".".join( server_ip.split('.')[0:-1]) + ".0" dns=[] entry="" if os.path.exists('/etc/resolv.conf'): # read dns f=open("/etc/resolv.conf", 'r') for line in f.readlines(): if line.startswith("nameserver") and len(dns) == 0: entry=line.split(' ')[1].strip() if entry != server_ip and entry != "127.0.0.1": dns.append(entry) f.close() if len(dns) == 0: # use server_ip as DNS dns.append(server_ip) # generate /etc/resolv.conf.real with real DNS # FIXME, use OpenDNS if entry is not found? if entry != "" and entry != server_ip: f=open(RESOLV_CONF_REAL, 'w') f.write("nameserver %s\n"%entry) f.close() options={ "__PROGRAM__":PACKAGE, "__DATE__":time.ctime(), "__MASK__":netmask, "__NET__":network, "__DNS__":dns[0], "__BROADCAST__":broadcast, "__ROUTERS__":gateway, "__SERVERIP__":server_ip, "__STARTIP__":self.w['txt_startip'].get_text(), "__ENDIP__":self.w['txt_endip'].get_text(), "__BOOTMODE__":boot_filename } # backup old conf file # generate /etc/dnsmasq.conf new_file=[] for block in DNSMASQ_CONF: for line in block: new_file.append(self.parse_dhcp(line, options)) try: f=open(DNSMASQ_FILE, 'w') for line in new_file: f.write(line + "\n") print_debug(DNSMASQ_FILE +":: %s"%line) f.close() except: # error writing gtk.gdk.threads_enter() self.w['lbl_dhcp'].set_markup( _("Error writing /etc/dnsmasq.conf.\nAre you root?") ) gtk.gdk.threads_leave() time.sleep(4) # edit /etc/hosts ip_pref=".".join(self.w['txt_startip'].get_text().split('.')[0:3]) ip_start=int(self.w['txt_startip'].get_text().split('.')[-1]) ip_end=int(self.w['txt_endip'].get_text().split('.')[-1]) txt_prefix=self.w['txt_hostname_prefix'].get_text() for ip in range ( (ip_end - ip_start) + 1 ): ip=ip_start + ip ipname=ip if ip > 100: ipname=ip-100 if not SIMULATE: self.write_into_etc_host( ["%s.%d"%(ip_pref, ip), "%s%02d"%(txt_prefix, ipname) ] ) print_debug("write_into_etc_host() %s"%["%s.%d"%(ip_pref, ip), "%s%02d"%(txt_prefix, ipname) ] ) # read ck_static data={ "iface":server_iface, "address":server_ip, "gateway":gateway, "netmask":netmask, "network":network, "broadcast":broadcast, } if false_gateway: print_debug("configureDNSMASQ() remove false_gateway") data['gateway']=None if self.w['ck_static'].get_active(): if self.configure_static(data): time.sleep(1) gtk.gdk.threads_enter() self.w['lbl_dhcp'].set_text( _("Configured static network") ) gtk.gdk.threads_leave() #self.exe_cmd("/etc/init.d/networking restart") self.exe_cmd("ifdown --all --exclude=lo") self.exe_cmd("ifdown --all --exclude=lo") self.exe_cmd("ifdown --all --exclude=lo") time.sleep(2) self.exe_cmd("ifup --all --exclude=lo") #self.exe_cmd("ifconfig %s"%server_iface) gtk.gdk.threads_enter() self.w['lbl_dhcp'].set_markup( _("Done") ) gtk.gdk.threads_leave() time.sleep(2) else: gtk.gdk.threads_enter() self.w['lbl_dhcp'].set_markup( _("ERROR:Error configuring static network.") ) gtk.gdk.threads_leave() time.sleep(4) gtk.gdk.threads_enter() self.w['lbl_dhcp'].set_text( _("Restarting DNSMASQ service...") ) gtk.gdk.threads_leave() fail=False if not SIMULATE: result=self.exe_cmd("/etc/init.d/dnsmasq restart") for line in result: if "fail" in line: fail=True if "OK" in line: fail=False if "done" in line: fail=False gtk.gdk.threads_enter() if not fail: self.w['lbl_dhcp'].set_markup( _("Done") ) else: self.w['lbl_dhcp'].set_markup( _("Error restarting DNSMASQ server.") ) gtk.gdk.threads_leave() def configureDHCP(self, *args): # get data gtk.gdk.threads_enter() self.w['btn_configure_dhcp'].set_sensitive(False) self.w['lbl_dhcp'].set_text( _("Configuring DHCP service...") ) self.w['lbl_dhcp'].show() gtk.gdk.threads_leave() boot_mode=self.read_select_value(self.w['combo_boot_mode']) boot_filename="/pxelinux.0" for boot in self.BOOT_MODES: print_debug("boot[0]=%s boot_mode=%s"%(boot[0], boot_mode) ) if boot[0] == boot_mode: boot_filename=boot[1] print_debug("configureDHCP() setting boot filename to %s"%boot_filename) # get server_ip false_gateway=False server_iface=self.read_select_value(self.w['combo_interfaces']) if self.configured_interfaces.has_key(server_iface) and len(self.configured_interfaces[server_iface]) > 1: server_ip=self.configured_interfaces[server_iface]['address'] try: gateway=self.configured_interfaces[server_iface]['gateway'] except: gateway=server_ip netmask=self.configured_interfaces[server_iface]['netmask'] if self.configured_interfaces[server_iface].has_key('network'): network=self.configured_interfaces[server_iface]['network'] else: network=".".join( server_ip.split('.')[0:-1]) + ".0" if self.configured_interfaces[server_iface].has_key('broadcast'): broadcast=self.configured_interfaces[server_iface]['broadcast'] else: broadcast=".".join( server_ip.split('.')[0:-1]) + ".255" else: print_debug("configureDHCP() dynamic IP") server_ip=None for interface in self.interfaces: if interface[0] == server_iface: server_ip=interface[1] if self.w['txt_serverip'].get_text() != '': server_ip=self.w['txt_serverip'].get_text() # gateway #gateway=self.exe_cmd("ip route| grep %s| awk '/^default/ {print $3}'"%server_iface) gateway=self.exe_cmd("/sbin/route -n| awk '/^0.0.0.0(.*)%s/ {print $2}'" %server_iface) if gateway == [] or gateway == "": print_debug("gateway not found, using server_ip") gateway=server_ip false_gateway=True else: print_debug("FOUNG gateway =%s"%gateway) false_gateway=False broadcast=".".join( server_ip.split('.')[0:-1]) + ".255" netmask="255.255.255.0" network=".".join( server_ip.split('.')[0:-1]) + ".0" dns=[] if os.path.exists('/etc/resolv.conf'): # read dns f=open("/etc/resolv.conf", 'r') for line in f.readlines(): if line.startswith("nameserver") and len(dns) == 0: dns.append(line.split(' ')[1].strip()) f.close() else: # use server_ip as DNS dns.append(server_ip) options={ "__PROGRAM__":PACKAGE, "__DATE__":time.ctime(), "__MASK__":netmask, "__NET__":network, "__DNS__":dns[0], "__BROADCAST__":broadcast, "__ROUTERS__":gateway, "__SERVERIP__":server_ip, "__STARTIP__":self.w['txt_startip'].get_text(), "__ENDIP__":self.w['txt_endip'].get_text(), "__BOOTMODE__":boot_filename } # backup old conf file # generate /etc/dhcp3/dhcpd.confask_ new_file=[] for block in DHCP_CONF: for line in block: new_file.append(self.parse_dhcp(line, options)) try: f=open("/etc/dhcp3/dhcpd.conf", 'w') for line in new_file: f.write(line + "\n") f.close() except: # error writing gtk.gdk.threads_enter() self.w['lbl_dhcp'].set_markup( _("Error writing /etc/dhcp3/dhcpd.conf.\nAre you root?") ) gtk.gdk.threads_leave() time.sleep(4) f=open("/etc/default/dhcp3-server", 'r') dhcpdata=[] for line in f.readlines(): if line.startswith("INTERFACES"): dhcpdata.append("INTERFACES=\"%s\"\n"%server_iface) else: dhcpdata.append(line) f.close() f=open("/etc/default/dhcp3-server", 'w') for line in dhcpdata: f.write(line) f.close() # edit /etc/hosts ip_pref=".".join(self.w['txt_startip'].get_text().split('.')[0:3]) ip_start=int(self.w['txt_startip'].get_text().split('.')[-1]) ip_end=int(self.w['txt_endip'].get_text().split('.')[-1]) txt_prefix=self.w['txt_hostname_prefix'].get_text() for ip in range ( (ip_end - ip_start) + 1 ): ip=ip_start + ip ipname=ip if ip > 100: ipname=ip-100 self.write_into_etc_host( ["%s.%d"%(ip_pref, ip), "%s%02d"%(txt_prefix, ipname) ] ) # read ck_static data={ "iface":server_iface, "address":server_ip, "gateway":gateway, "netmask":netmask, "network":network, "broadcast":broadcast, } if self.w['ck_static'].get_active(): if self.configure_static(data): time.sleep(1) gtk.gdk.threads_enter() self.w['lbl_dhcp'].set_text( _("Configured static network") ) gtk.gdk.threads_leave() #self.exe_cmd("/etc/init.d/networking restart") self.exe_cmd("ifdown --all --exclude=lo") self.exe_cmd("ifdown --all --exclude=lo") self.exe_cmd("ifdown --all --exclude=lo") time.sleep(2) self.exe_cmd("ifup --all --exclude=lo") #self.exe_cmd("ifconfig %s"%server_iface) gtk.gdk.threads_enter() self.w['lbl_dhcp'].set_markup( _("Done") ) gtk.gdk.threads_leave() time.sleep(2) else: gtk.gdk.threads_enter() self.w['lbl_dhcp'].set_markup( _("ERROR:Error configuring static network.") ) gtk.gdk.threads_leave() time.sleep(4) gtk.gdk.threads_enter() self.w['lbl_dhcp'].set_text( _("Restarting DHCP service...") ) gtk.gdk.threads_leave() result=self.exe_cmd("/etc/init.d/dhcp3-server restart") fail=False for line in result: if "fail" in line: fail=True if "OK" in line: fail=False gtk.gdk.threads_enter() if not fail: self.w['lbl_dhcp'].set_markup( _("Done") ) else: self.w['lbl_dhcp'].set_markup( _("Error restarting DHCP server.") ) gtk.gdk.threads_leave() def on_btn_launch_tcosconfig(self, widget): th=Thread(target=self.exe_cmd, args=('gksu tcosconfig',) ) th.setDaemon(1) th.start() ################################################################################ def ask_msg(self, txt): response="yes" d = gtk.MessageDialog(None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, txt) if d.run() == gtk.RESPONSE_YES: response=True else: response=False d.destroy() return response def exe_cmd(self, cmd, verbose=1): self.p = Popen(cmd, shell=True, bufsize=0, stdout=PIPE, stderr=STDOUT, close_fds=True) output=[] stdout = self.p.stdout for line in stdout.readlines(): if line != '\n': line=line.replace('\n', '') output.append(line) if len(output) == 1: return output[0] elif len(output) > 1: if verbose==1: print_debug ( "exe_cmd(%s) %s" %(cmd, output) ) return output else: if verbose == 1: print_debug ( "exe_cmd(%s)=None" %(cmd) ) return [] def quitapp(self,*args): print_debug ( "Exiting" ) self.mainloop.quit() def run (self): self.mainloop = gobject.MainLoop() try: self.mainloop.run() except KeyboardInterrupt: # Press Ctrl+C self.quitapp() if __name__ == '__main__': app = TcosStandalone () # Run app app.run () tcos-configurator-1.23/images/0000755000000000000000000000000011771055762013255 5ustar tcos-configurator-1.23/images/tcos-icon-32x32.png0000644000000000000000000000320711771055762016442 0ustar PNG  IHDR szzbKGD pHYsg tIME bIDATX[lT}Ιm &&C87(8i8"Z!%jC/(}DJڦJ(!.RF !(m2F{f90 "Rڪ>{_Z{5pnPy)J pQX~zj༠o,s Tź[umZ 1Ta~oi@=) huǣ1!/_r7W?Un__־q6oѼ5/x`j~De> @&BLdLJ)CJ +I͍Tҵpʱczש;;t۟X܌`;00!+Fݧm;s L?c&ÛiڡwŅUTcT'#'$C U/PIҶ h*ڲoJe'Z/@ϪMKy6F, /r 8n 4ÕZ/ |~[ꅔ4u喆7|3c cYS m4N ܆d{+P>Olx3Zwot6 WIsז>Zg+ D0c'ԥG#/֥SktVg-ʑKK .M]ffxZP:VcA9Y8VR.V sE=K L 5,)Ej|Bѫ~Q[|!:::x< X,uxt!i:eYP(Dҁ@ JvmܹSkih:ZMIENDB`tcos-configurator-1.23/images/tcos-logo.png0000644000000000000000000003125311771055762015675 0ustar PNG  IHDR^RsRGBbKGD pHYsg tIME 7\69 IDATxyx]Wyfɲ%OI<$ !!#ƔTxKR -S-m)m\(n)! %!Bfǎxٖe`Gg>g?Zzq} \ksj.m+S@n;DpKfK~Z,Zj`'^Ճj֛"Cr@0D#a`8F'GT6lmJB ~0O hp1va8 Ix9\vX"]̗^0\㤈gE @F1Iw{gsn"( P'*X\ ,j ,̼8< l&ҥbEeAVvm^9y>[ |0`fd FZX"$*n. DGT6f5W4=|Hͱy;Ĉ1IJ2 5023]NArv@L*+k"V hZ[W4=<6-`9$np'9 5 Rqn-K9l0>1k368+,Q|hoGOskWkbZ ~V4=[V&`|W Z2FDʸa(DY}\ᴈ6;d0R8$]#\:vWF(̦wҞw^%9'̭fg07@V/NZ%"g:0b`e0HH#l #i@kҎ_WOGETuUF]Lp9pp!-y͜]&I1ElŴB%6HwPBaNDձ"( h{ՊV}k-p%`| U"%fTE|VZsx~F-%bKocL@80BuH VfYb>sB4,PD>;0\|w6yjܰke6Ty Gfo' PI5{Xbba,fD3$d-wpkz0]DJ'drH :qRw)r !#b IEmT[":{|?^߉-hLpT2$Ϻ Ў_Rlb^M'erW̲L<$,vR8Xzoqx;piJlxTϘe(;j,DM%jjgRu^%~Ё*!l:'GMIN@ nM1=녖lR)̸q{ u<|9^פ_F}' yj.b-rj,@k(=nj.n,Yf=ܙ% ujܰʌf֠κbRAH 70{,EX|=lRiY81j-6`*H:IǶ6s. Z/oLT>;49Wȳ:B}Z8v{`ڀO(,e Nіأc 8}frTXI5E6 Ϲh@M DM>T5nNlNo)" |BL[ \/oBL7ʸXK'<@$4owNIPSAf`LIe\$Z3Q"Xb.R/h̳إ["3`Q"{-=hyn"|yfoIˌɖ[~ۡW)/RM}61q.4O類>/1=n6l,`1A&)H NiB X4V%Y:H7N0dZa9FUP%ckU biә`E sa3"'_hVR a0❵ڈ j"G|lYE7u w?JPL1rTl#]qPPAPS FꨢC]l_*̈Ƅ1#,h:NV&Wυq3N஡yKQN)d,'Ҁūv-XT&JĴ|0B7sɲXS" Q]1G4{&Қ'aaͮ0,2䨳=cE+ \`E}BL7`8BTXδFKG/ Y`MY;㊝?`NaO׾'d1"(PSs'9ZnxfqMAD-Gc0ᔥ子SFq.DEFNikJUbi"(y d0$1#6 LS(hK6QȂsEvT4=cb=,B&u`^ī-Կ4PӃsyM= tB-+.fǸAР mAME{0&jo%3U nJ"H993~%&#q*.>~Sz*o'PY~ޖ5gFaQ|XufB3`;_^1ڦN@`KPf0AѾ'f5 $#'ҶrRꆺP7Eɡk9vjFNqMWǨ&?A+V g|vtjN@jXP&8/h-kĚ Osm"˃V@fa6gh \ru`mn!ۮ~lknv脯L4O>H%XW7)@*;xl>V(IR-TD$f~lfR u0#.o[)D@uM-=UɁb"W0аG{6\mk?-/giQsk,O~h/_rvJ]P^¥rMl(ޢ>h)  (ޱu* uVo=U;|&]^sakv|p.UDu3{Wu*_Ɍi̓5uA+Qԧ!+_XU#*Xt-'jϝf,/XMnr= 0fm̢i0vas_qE&Q0Gغ_F{HEk8."Uh =.kѵt.^#wgt4pm{I{Z_hA0ӚB@̒[H$=L\FYó$BEPE&].;'گ!IzjɊ:R7]ѽJ0VՀ=}$/sJјTb4׹"'ByP\2$-G+qW0U00Qn&),*3Yret-|hGZvlm׼Kw)Z`qT'z*b_Pޓk.RDöM>πő YФF{#2E0uL͜.9&((Ri#j"=oQ#YF`|0t*F5TE]˱7MLl?07®-Dӣl[Xu=#Očgޥ^Xս~f8  8!Jȑc7:bx4Mh K,;b2{Id逦~%6ҽ` h owSCNFOpd9ikPX^u~YO''wnnq񈤼5qdO3a3pkK oI@R:cgh2nqZc!Σ'qO< {5_hPPq%]뜊&[M P`kga؋[\B}xLU'zXT[`~ Lεa,uU\uBh6kJY0c 0,sz7#vީ1z´bEj$jFNS3<5očN>YoNqi9u>"h܅3`tG0Y!\>f,]*c^ GxbkPXmWZY&&o)ڦ9"l7a}wVGO3BL9b/!KF*RzXeSh4Hde詥 'g5FE*QyKa~=v1@-qdg0~I˪='1^~de۠!;k-k*OrzZV b~.b#|>6H*#K){۴5fhh3@[h 7).a}P/K0̴RĦk%Eʴ_.;jߙ0۾E WH`mc5wns:FkLy6r&8ѐ[aY+\BQSCNF&30KBDĐˤ(0^ʯ^4εH2ֵ(92Gq^Ǵs|ыo^.kZƦ׳swh/-=ϣ,<[>H545zVXwܠjE="v A9Ym/a}0[[}>s2ϔciR<ߙVT԰; յep.E$`݄rЍLM"T5@m*bl*df1n{ivF,#7-oH6I~3 Fƃn 5ȫkEMHH1pJ4l;"҇q=䱎2@R,p(>LzqYdƦ^kHr:E=Z6RǙ߽ڑzܒO;ɅN34)&7[BCkm!Gj:mPa!Jh)GG4]1 a;l,5,eid&H_o'oi vQ;|bfOi+nYl<2dKye Hv"S⬛\= , /GDVPN`vpD 25 Eپm`͎#gw94^(: `qpE+-Q'rzIJ Lgg,:e/(ͷ5y?safd (^J#HXmW?dOAՙ0AܚөXJm2lXQ~;`*`|1?uZFU_P7?%}pf a׌_}Q,-g, xu"jf,r>tq*P( Zg)Җ'8o)xBޝ\M¸[Ðk``m沽?S;V/EgUޠIš􂳴.L~+fa a}]w2Xq ;`R43ң'FU UN8Ξe]FǞԧK&s|ckg_q,&&y7b# ;lg hjFa[ DX6wIDAT.?ndW(3ъ̢ۖ;JT5Zg,s3!c62ŔL-Wǫ8k"}Ppm= [X 3j1H:o;-}vvz'`zp 5U(K嚀pXK;ԌD*tUk5uץ**h|mO<Ŭio"t˪Y_f뢡|*Vy?kGӃm 6Tl_hy`4hQ̶?(w W'REh4$:JLm)[rsgp׌ ,+DVn:8:y=ct[+s8:#o:ޢ寉Mޢ6&CYR}{ubÖi%tNT .(Ͽ Ew68rg8>XIqrv+Sɧ߶wuU1mq|'Җk`H3|"9S/k^"<~yَxtg0~i71>eW{Zdv,UR漥d<*qY6>*e=¼0v 1K>:qk]\[N)n:BiwxYomΊDfWKΠshK~GlM8M>A/Uj2|-(YK4h:Ȝ>kScLrhvrueb;lx/XZpP X,\P8ENx۪L:%T sNk(aF;(^;{p_wn R(BcB9bG~`3`Eꨀ\L~~]%aevrȦsN.GtHu:?ˌHO RH0E ZUwEW)qJ\=l&dY35G Ll*D=9g1Uj-K,tPI#Ls`?ũ%Fg/2}  BZrb@qcgkPfwȊ=;[)"&_zw==_@yFyLj }n.M5ÍCZ>̅<Ø磸lfI1K /hfQSI^Q,[-hލ2mL7F6=-}H\V e8Z rfFS˘@ D\/gFdqQNcbk6& ޾Ixv(#D(P5ks5\ReM|+sm]8U:NYBs;ݾlq96pMYK^v,n 7wdtoU,ѡ οGab8-=q~ |Lunx׀"#VDS ]oE8UYo32|%o .`(owϹw{R D" ;܉A]]w5y3wq3'KX,s{1y(7Ok(I`VJ%#0n8kuxi9 %\WwBwxBݿuu ^_[#`Cwq{*³[JI]~Wt[yRu.]XȌت:JǹgAqyyqn]b%&k:\T{r|Qu0ㄅɒoѰJɴKu!~heSuuerke0?G 3pxLu{?m]Y.֟N9 SnkMr6#-%}%΀JuqQ9$ۀi eaJC?c?|&{7HR2 v+niV&A%7*DLjV#ƴO(" =kPsDpZ2i^0TS6-R-~@2x73P=OYY'}!Fat {n\ie2Ij`L4iMf2 RS<$:gcra=QY{KՀ/q>v:A;{fPg^;&eWZ"3yw3:|B^1&iqf@Ns?\ux(Y\Si7x[睨HP眷Z`SoNi^ye=] >,JR-Q)ûuajb%|R}K^8brtr^wܢ8ef(KI/X ``@na %pF,9 ܫ:qw 8ҷ8xP(}+7ŭCSbPa x#bnԫh}z[:.Vƿ[e [{oVپ,D/z&̽̈/u59lh}1JVyǯkb8M[gi/ꋲ}JͰ>1W7[Qۄ Qv %*i9)LXTQX`rc +^X&%Wd17',YqU{-r셻u+oN=,ϰci~2{5ɹIـ% TqBPUo5̄׉GhG9#Etk Qj`?5A&Esnn|Z-HȵzZz^?L3ǡPxtk;gw:gg`̽N}a3 z ?>RpD"xQ_K[)>=qYbRjܪIJs x ]^~2*|TE:D\CSNN\ϻ8>72aUS9w*ן_hudמ۷SRksm͵6\ksm͵6\ksm͵?R IENDB`tcos-configurator-1.23/po/0000755000000000000000000000000011772323006012414 5ustar tcos-configurator-1.23/po/fr.po0000644000000000000000000002152511771055762013402 0ustar # Translation of tcos-configurator to french. # Copyright (C) 2012, French l10n team # This file is distributed under the same license as the tcos-configurator package. # Julien Patriarca , 2012. # msgid "" msgstr "" "Project-Id-Version: tcos-configurator\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-11-21 19:41+0100\n" "PO-Revision-Date: 2012-05-02 14:20+0100\n" "Last-Translator: Julien Patriarca \n" "Language-Team: FRENCH \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../tcos-configurator.glade:9 msgid "TCOS Server configurator" msgstr "Configurateur du serveur TCOS" #: ../tcos-configurator.glade:53 msgid "Configure TCOS server" msgstr "Configurer le serveur TCOS" #: ../tcos-configurator.glade:105 msgid "DHCP net interface" msgstr "Interface réseau pour DHCP" #: ../tcos-configurator.glade:150 msgid "Start IP" msgstr "adresse IP de début" #: ../tcos-configurator.glade:199 msgid "End IP" msgstr "adresse IP de fin" #: ../tcos-configurator.glade:318 ../tcos-configurator.glade:861 #: ../tcos-configurator.glade:1140 msgid "Commit changes" msgstr "ajouter les changements" #: ../tcos-configurator.glade:357 msgid "Boot mode" msgstr "mode de démarrage" #: ../tcos-configurator.glade:403 msgid "Server IP" msgstr "IP du serveur" #: ../tcos-configurator.glade:457 msgid "" "WARNING:\n" "Detected dynamic IP" msgstr "" "AVERTISSEMENT :\n" "IP dynamique détectée" #: ../tcos-configurator.glade:484 msgid "" "configure this IP as static\n" "(disable NetworkManager)" msgstr "" "configurer cette adresse IP en statique\n" "(désactive NetworkManager)" #: ../tcos-configurator.glade:516 msgid "host" msgstr "hôte" #: ../tcos-configurator.glade:539 msgid "Hostname prefix" msgstr "préfixe pour le nom de machine" #: ../tcos-configurator.glade:606 msgid "DHCP server" msgstr "serveur DHCP" #: ../tcos-configurator.glade:639 msgid "Numer of users to create" msgstr "Nombre d'utilisateurs à créer" #: ../tcos-configurator.glade:667 msgid "Prefix" msgstr "Préfixe" #: ../tcos-configurator.glade:722 msgid "" "Groups to add users\n" "(use spaces to separate)\n" "(default fuse)\n" msgstr "" "Groupes où ajouter les utilisateurs\n" "(utilisez des espaces pour séparer)\n" "(la valeur par défaut est fuse)\n" #: ../tcos-configurator.glade:778 msgid "user" msgstr "utilisateur" #: ../tcos-configurator.glade:900 msgid "Passwords are same string as username" msgstr "" "Les mots de passe sont les mêmes chaînes que les noms d'utilisateur" #: ../tcos-configurator.glade:934 msgid "Remote users" msgstr "Utilisateurs distants" #: ../tcos-configurator.glade:975 msgid "enable autologin" msgstr "activer l'ouverture de session automatique" #: ../tcos-configurator.glade:995 msgid "" "Autologin timeout\n" "(in seconds)" msgstr "" "Expiration du délai pour l'ouverture de session automatique\n" "(en secondes)" #: ../tcos-configurator.glade:1046 msgid "" "Remote login\n" "(required for TCOS)" msgstr "" "Connexion à distance\n" "(nécessaire pour TCOS)" #: ../tcos-configurator.glade:1076 msgid "enable remote login" msgstr "activer la connexion à distance" #: ../tcos-configurator.glade:1212 msgid "Autologin" msgstr "Ouverture de session automatique" #: ../tcos-configurator.glade:1286 msgid "Login manager" msgstr "Gestionnaire d'identifiant" #: ../tcos-configurator.glade:1361 msgid "Launch TcosConfig" msgstr "Lancer TcosConfig" #: ../tcos-configurator.glade:1400 msgid "" "TcosConfig is a tool to generate TCOS network boot images. The images are " "downloaded using PXE protocol.\n" "\n" "You can add or remove some tools in images and configure a lot of hardware " "settings." msgstr "" "TcosConfig est un outil pour générer des images réseau amorçables de TCOS. " "Les images sont téléchargées en utilisant le protocole PXE.\n" "\n" "Vous pouvez ajouter ou supprimer certains outils dans les images et " "configurer beaucoup de réglages matériels." #: ../tcos-configurator.glade:1435 msgid "Boot images" msgstr "Images amorçables" #: ../tcos-configurator.glade:1492 msgid "Autologin help" msgstr "Aide pour la connexion automatique" #: ../tcos-configurator.glade:1516 msgid "TCOS Autologin" msgstr "Connexion automatique pour TCOS" #: ../tcos-configurator.glade:1541 msgid "" "TCOS can work in kiosk mode.\n" "\n" "All you need is to configure the hostnames with the same value " "as usernames.\n" "\n" "Example:" msgstr "" "TCOS peut fonctionner en mode kiosque.\n" "\n" "Tout ce dont vous avez besoin est de configurer les noms d'hôte avec la " "même valeur que les noms d'utilisateurs.\n" "\n" "Exemple :" #: ../tcos-configurator.glade:1570 msgid "" "Users: from user01 to user15\n" "Hostnames: from user01 to user15" msgstr "" "Utilisateurs : d'utilisateur01 à utilisateur15\n" "Noms d'hôte : d'utilisateur01 à utilisateur15" #: ../tcos-configurator.glade:1596 msgid "" "1.- Create users with tcos-configurator\n" "2.- Configure DHCP with a 15 IP's range (or more)\n" "3.- Edit /etc/hosts and add this:" msgstr "" "1.- Créer des utilisateurs avec tcos-configurator\n" "2.- Configurer le DHCP avec une gamme de 15 adresses IP (ou plus)\n" "3.- Éditer /etc/hosts et ajoutez ceci :" #: ../tcos-configurator.glade:1623 msgid "" "192.168.0.101 user01\n" "192.168.0.102 user02\n" "192.168.0.103 user03\n" "...\n" "192.168.0.115 user15" msgstr "" "192.168.0.101 utilisateur01\n" "192.168.0.102 utilisateur02\n" "192.168.0.103 utilisateur03\n" "...\n" "192.168.0.115 utilisateur15" #: ../tcos-configurator.py:293 msgid "TCOS and Backharddi" msgstr "TCOS et Backharddi" #: ../tcos-configurator.py:294 ../tcos-configurator.py:299 msgid "TCOS" msgstr "TCOS" #: ../tcos-configurator.py:295 msgid "Backharddi" msgstr "Backharddi" #: ../tcos-configurator.py:464 msgid "" "WARNING:\n" "Network interface don't have IP" msgstr "" "AVERTISSEMENT :\n" "L'interface réseau ne possède pas d'adresse IP" #: ../tcos-configurator.py:483 ../tcos-configurator.py:488 #, python-format msgid "" "Your %s file will be overwritten.\n" "\n" "Continue?" msgstr "" "Votre %s fichier va être écrasé.\n" "\n" "Continuer ?" #: ../tcos-configurator.py:553 msgid "" "Reboot required (or restart gdm/kdm daemon) to enable new GDM/KDM " "settings" msgstr "" "Un redémarrage est requis (ou veuillez redémarrer le démon gdm/kdm) pour " "activer les nouveaux réglages de GDM/KDM" #: ../tcos-configurator.py:590 #, python-format msgid "Creating from %(prefix)s%(init)02d to %(prefix)s%(end)02d" msgstr "En train de créer depuis %(prefix)s%(init)02d vers %(prefix)s%(end)02d" #: ../tcos-configurator.py:623 #, python-format msgid "Creating user: '%s'" msgstr "En train de créer : « %s »" #: ../tcos-configurator.py:631 #, python-format msgid "User already exists: '%s'" msgstr "L'utilisateur existe déjà : « %s »" #: ../tcos-configurator.py:637 ../tcos-configurator.py:972 #: ../tcos-configurator.py:996 ../tcos-configurator.py:1156 #: ../tcos-configurator.py:1178 msgid "Done" msgstr "Fait" #: ../tcos-configurator.py:818 msgid "Configuring DNSMASQ service..." msgstr "Configuration du service DNSMASQ en cours…" #: ../tcos-configurator.py:925 msgid "" "Error writing /etc/dnsmasq.conf.\n" "Are you root?" msgstr "" "Une erreur s'est produite pendant l'écriture dans /etc/dnsmasq.conf.\n" "Êtes-vous superutilisateur ?" #: ../tcos-configurator.py:962 ../tcos-configurator.py:1146 msgid "Configured static network" msgstr "Réseau statique configuré" #: ../tcos-configurator.py:977 ../tcos-configurator.py:1161 msgid "ERROR:Error configuring static network." msgstr "" "ERREUR: Une erreur s'est produite lors de la configuration statique du " "réseau." #: ../tcos-configurator.py:983 msgid "Restarting DNSMASQ service..." msgstr "Redémarrage du service DNSMASQ en cours…" #: ../tcos-configurator.py:998 msgid "Error restarting DNSMASQ server." msgstr "" "Une erreur s'est produite lors du redémarrage du serveur DNSMASQ." #: ../tcos-configurator.py:1006 msgid "Configuring DHCP service..." msgstr "Configuration du service DHCP en cours…" #: ../tcos-configurator.py:1100 msgid "" "Error writing /etc/dhcp3/dhcpd.conf.\n" "Are you root?" msgstr "" "Une erreur s'est produite lors de l'écriture dans /etc/dhcp3/dhcpd.conf.\n" "Êtes-vous superutilisateur ?" #: ../tcos-configurator.py:1167 msgid "Restarting DHCP service..." msgstr "Redémarrage du service DHCP en cours…" #: ../tcos-configurator.py:1180 msgid "Error restarting DHCP server." msgstr "Une erreur s'est produite lors du redémarrage du serveur DHCP." tcos-configurator-1.23/po/tcos-configurator.pot0000644000000000000000000001337011771055762016626 0ustar # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-11-21 19:41+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ../tcos-configurator.glade:9 msgid "TCOS Server configurator" msgstr "" #: ../tcos-configurator.glade:53 msgid "Configure TCOS server" msgstr "" #: ../tcos-configurator.glade:105 msgid "DHCP net interface" msgstr "" #: ../tcos-configurator.glade:150 msgid "Start IP" msgstr "" #: ../tcos-configurator.glade:199 msgid "End IP" msgstr "" #: ../tcos-configurator.glade:318 ../tcos-configurator.glade:861 #: ../tcos-configurator.glade:1140 msgid "Commit changes" msgstr "" #: ../tcos-configurator.glade:357 msgid "Boot mode" msgstr "" #: ../tcos-configurator.glade:403 msgid "Server IP" msgstr "" #: ../tcos-configurator.glade:457 msgid "" "WARNING:\n" "Detected dynamic IP" msgstr "" #: ../tcos-configurator.glade:484 msgid "" "configure this IP as static\n" "(disable NetworkManager)" msgstr "" #: ../tcos-configurator.glade:516 msgid "host" msgstr "" #: ../tcos-configurator.glade:539 msgid "Hostname prefix" msgstr "" #: ../tcos-configurator.glade:606 msgid "DHCP server" msgstr "" #: ../tcos-configurator.glade:639 msgid "Numer of users to create" msgstr "" #: ../tcos-configurator.glade:667 msgid "Prefix" msgstr "" #: ../tcos-configurator.glade:722 msgid "" "Groups to add users\n" "(use spaces to separate)\n" "(default fuse)\n" msgstr "" #: ../tcos-configurator.glade:778 msgid "user" msgstr "" #: ../tcos-configurator.glade:900 msgid "Passwords are same string as username" msgstr "" #: ../tcos-configurator.glade:934 msgid "Remote users" msgstr "" #: ../tcos-configurator.glade:975 msgid "enable autologin" msgstr "" #: ../tcos-configurator.glade:995 msgid "" "Autologin timeout\n" "(in seconds)" msgstr "" #: ../tcos-configurator.glade:1046 msgid "" "Remote login\n" "(required for TCOS)" msgstr "" #: ../tcos-configurator.glade:1076 msgid "enable remote login" msgstr "" #: ../tcos-configurator.glade:1212 msgid "Autologin" msgstr "" #: ../tcos-configurator.glade:1286 msgid "Login manager" msgstr "" #: ../tcos-configurator.glade:1361 msgid "Launch TcosConfig" msgstr "" #: ../tcos-configurator.glade:1400 msgid "" "TcosConfig is a tool to generate TCOS network boot images. The images are " "downloaded using PXE protocol.\n" "\n" "You can add or remove some tools in images and configure a lot of hardware " "settings." msgstr "" #: ../tcos-configurator.glade:1435 msgid "Boot images" msgstr "" #: ../tcos-configurator.glade:1492 msgid "Autologin help" msgstr "" #: ../tcos-configurator.glade:1516 msgid "TCOS Autologin" msgstr "" #: ../tcos-configurator.glade:1541 msgid "" "TCOS can work in kiosk mode.\n" "\n" "All you need is to configure the hostnames with the same value " "as usernames.\n" "\n" "Example:" msgstr "" #: ../tcos-configurator.glade:1570 msgid "" "Users: from user01 to user15\n" "Hostnames: from user01 to user15" msgstr "" #: ../tcos-configurator.glade:1596 msgid "" "1.- Create users with tcos-configurator\n" "2.- Configure DHCP with a 15 IP's range (or more)\n" "3.- Edit /etc/hosts and add this:" msgstr "" #: ../tcos-configurator.glade:1623 msgid "" "192.168.0.101 user01\n" "192.168.0.102 user02\n" "192.168.0.103 user03\n" "...\n" "192.168.0.115 user15" msgstr "" #: ../tcos-configurator.py:293 msgid "TCOS and Backharddi" msgstr "" #: ../tcos-configurator.py:294 ../tcos-configurator.py:299 msgid "TCOS" msgstr "" #: ../tcos-configurator.py:295 msgid "Backharddi" msgstr "" #: ../tcos-configurator.py:464 msgid "" "WARNING:\n" "Network interface don't have IP" msgstr "" #: ../tcos-configurator.py:483 ../tcos-configurator.py:488 #, python-format msgid "" "Your %s file will be overwritten.\n" "\n" "Continue?" msgstr "" #: ../tcos-configurator.py:553 msgid "" "Reboot required (or restart gdm/kdm daemon) to enable new GDM/KDM " "settings" msgstr "" #: ../tcos-configurator.py:590 #, python-format msgid "Creating from %(prefix)s%(init)02d to %(prefix)s%(end)02d" msgstr "" #: ../tcos-configurator.py:623 #, python-format msgid "Creating user: '%s'" msgstr "" #: ../tcos-configurator.py:631 #, python-format msgid "User already exists: '%s'" msgstr "" #: ../tcos-configurator.py:637 ../tcos-configurator.py:972 #: ../tcos-configurator.py:996 ../tcos-configurator.py:1156 #: ../tcos-configurator.py:1178 msgid "Done" msgstr "" #: ../tcos-configurator.py:818 msgid "Configuring DNSMASQ service..." msgstr "" #: ../tcos-configurator.py:925 msgid "" "Error writing /etc/dnsmasq.conf.\n" "Are you root?" msgstr "" #: ../tcos-configurator.py:962 ../tcos-configurator.py:1146 msgid "Configured static network" msgstr "" #: ../tcos-configurator.py:977 ../tcos-configurator.py:1161 msgid "ERROR:Error configuring static network." msgstr "" #: ../tcos-configurator.py:983 msgid "Restarting DNSMASQ service..." msgstr "" #: ../tcos-configurator.py:998 msgid "Error restarting DNSMASQ server." msgstr "" #: ../tcos-configurator.py:1006 msgid "Configuring DHCP service..." msgstr "" #: ../tcos-configurator.py:1100 msgid "" "Error writing /etc/dhcp3/dhcpd.conf.\n" "Are you root?" msgstr "" #: ../tcos-configurator.py:1167 msgid "Restarting DHCP service..." msgstr "" #: ../tcos-configurator.py:1180 msgid "Error restarting DHCP server." msgstr "" tcos-configurator-1.23/po/es.po0000644000000000000000000002040311771055762013374 0ustar # Translation template for tcos-configurator # Copyright (C) 2008 Mario Izquierdo # This file is distributed under the same license as the tcos-configurator package. # Mario Izquierdo , 2008, 2009, 2011. # msgid "" msgstr "" "Project-Id-Version: tcos-configurator 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-11-21 19:41+0100\n" "PO-Revision-Date: 2011-11-21 19:42+0100\n" "Last-Translator: Mario Izquierdo \n" "Language-Team: Español; Castellano <>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bits\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" #: ../tcos-configurator.glade:9 msgid "TCOS Server configurator" msgstr "Configurador del servidor TCOS" #: ../tcos-configurator.glade:53 msgid "Configure TCOS server" msgstr "Configurar servidor TCOS" #: ../tcos-configurator.glade:105 msgid "DHCP net interface" msgstr "Interfaz de red DHCP" #: ../tcos-configurator.glade:150 msgid "Start IP" msgstr "IP de inicio" #: ../tcos-configurator.glade:199 msgid "End IP" msgstr "IP final" #: ../tcos-configurator.glade:318 ../tcos-configurator.glade:861 #: ../tcos-configurator.glade:1140 msgid "Commit changes" msgstr "Guardar cambios" #: ../tcos-configurator.glade:357 msgid "Boot mode" msgstr "Modo de arranque" #: ../tcos-configurator.glade:403 msgid "Server IP" msgstr "Dirección IP" #: ../tcos-configurator.glade:457 msgid "" "WARNING:\n" "Detected dynamic IP" msgstr "" "ADVERTENCIA:\n" "Se ha detectado IP dinámica" #: ../tcos-configurator.glade:484 msgid "" "configure this IP as static\n" "(disable NetworkManager)" msgstr "" "configurar esta IP como estática\n" "(desahilita NetworkManager)" #: ../tcos-configurator.glade:516 msgid "host" msgstr "equipo" #: ../tcos-configurator.glade:539 msgid "Hostname prefix" msgstr "Prefijo de equipo" #: ../tcos-configurator.glade:606 msgid "DHCP server" msgstr "Servidor DHCP" #: ../tcos-configurator.glade:639 msgid "Numer of users to create" msgstr "Número de usuarios a crear" #: ../tcos-configurator.glade:667 msgid "Prefix" msgstr "Prefijo" #: ../tcos-configurator.glade:722 msgid "" "Groups to add users\n" "(use spaces to separate)\n" "(default fuse)\n" msgstr "" "Grupos que pertenece el usuario\n" "(usar espacios para separar)\n" "(por defecto fuse)\n" #: ../tcos-configurator.glade:778 msgid "user" msgstr "usuario" #: ../tcos-configurator.glade:900 msgid "Passwords are same string as username" msgstr "Las contraseñas es el nombre de usuario" #: ../tcos-configurator.glade:934 msgid "Remote users" msgstr "Usuarios remotos" #: ../tcos-configurator.glade:975 msgid "enable autologin" msgstr "activar autologin" #: ../tcos-configurator.glade:995 msgid "" "Autologin timeout\n" "(in seconds)" msgstr "" "Tiempo de espera para\n" "entrada automática\n" "(en segundos)" #: ../tcos-configurator.glade:1046 msgid "" "Remote login\n" "(required for TCOS)" msgstr "" "Entrada remota\n" "(TCOS lo necesita)" #: ../tcos-configurator.glade:1076 msgid "enable remote login" msgstr "activar entrada remota" #: ../tcos-configurator.glade:1212 msgid "Autologin" msgstr "Entrada automática" #: ../tcos-configurator.glade:1286 msgid "Login manager" msgstr "Gestor de entrada" #: ../tcos-configurator.glade:1361 msgid "Launch TcosConfig" msgstr "Ejecutar TcosConfig" #: ../tcos-configurator.glade:1400 msgid "" "TcosConfig is a tool to generate TCOS network boot images. The images are " "downloaded using PXE protocol.\n" "\n" "You can add or remove some tools in images and configure a lot of hardware " "settings." msgstr "" "TcosConfig es una herramienta para generar imágenes de arranque TCOS. Las " "imágenes se descarganán por la red mediante el protocolo PXE.\n" "\n" "Puedes añadir o quitar algunas herramientas, así como configurar variables " "de hardware." #: ../tcos-configurator.glade:1435 msgid "Boot images" msgstr "Imágenes de arranque" #: ../tcos-configurator.glade:1492 msgid "Autologin help" msgstr "Ayuda para el autologin" #: ../tcos-configurator.glade:1516 msgid "TCOS Autologin" msgstr "Entrada automática TCOS" #: ../tcos-configurator.glade:1541 msgid "" "TCOS can work in kiosk mode.\n" "\n" "All you need is to configure the hostnames with the same value " "as usernames.\n" "\n" "Example:" msgstr "" "TCOS puede funcionar en modo kiosko.\n" "\n" "Todo lo que necesitas es configurar los nombres de equipo con el " "mismo prefijo de nombre de equipo y nombre de usuario\n" "\n" "Ejemplo:" #: ../tcos-configurator.glade:1570 msgid "" "Users: from user01 to user15\n" "Hostnames: from user01 to user15" msgstr "" "Usuarios: desde usuario01 a usuario15\n" "Nombre de equipo: desde usuario01 a usuario15" #: ../tcos-configurator.glade:1596 msgid "" "1.- Create users with tcos-configurator\n" "2.- Configure DHCP with a 15 IP's range (or more)\n" "3.- Edit /etc/hosts and add this:" msgstr "" "1.- Crea los usuarios con tcos-configurator\n" "2.- Configura el servidor DHCP con al menos un rango de 15 " "direcciones IP\n" "3.- Edita /etc/hosts y añade esto:" #: ../tcos-configurator.glade:1623 msgid "" "192.168.0.101 user01\n" "192.168.0.102 user02\n" "192.168.0.103 user03\n" "...\n" "192.168.0.115 user15" msgstr "" "192.168.0.101 usuario01\n" "192.168.0.102 usuario02\n" "192.168.0.103 usuario03\n" "...\n" "192.168.0.115 usuario15" #: ../tcos-configurator.py:293 msgid "TCOS and Backharddi" msgstr "TCOS y Backharddi" #: ../tcos-configurator.py:294 ../tcos-configurator.py:299 msgid "TCOS" msgstr "TCOS" #: ../tcos-configurator.py:295 msgid "Backharddi" msgstr "Backharddi" #: ../tcos-configurator.py:464 msgid "" "WARNING:\n" "Network interface don't have IP" msgstr "" "ADVERTENCIA:\n" "El interfaz de red no tiene IP" #: ../tcos-configurator.py:483 ../tcos-configurator.py:488 #, python-format msgid "" "Your %s file will be overwritten.\n" "\n" "Continue?" msgstr "" "El archivo %s será sobreescrito.\n" "\n" "¿Continuar?" #: ../tcos-configurator.py:553 msgid "" "Reboot required (or restart gdm/kdm daemon) to enable new GDM/KDM " "settings" msgstr "" "Se necesita reiniciar el equipo (o el proceso gdm/kdm) para activar la " "nueva configuración de GDM/KDM" #: ../tcos-configurator.py:590 #, python-format msgid "Creating from %(prefix)s%(init)02d to %(prefix)s%(end)02d" msgstr "Creando desde %(prefix)s%(init)02d hasta %(prefix)s%(end)02d" #: ../tcos-configurator.py:623 #, python-format msgid "Creating user: '%s'" msgstr "Creando usuario: '%s'" #: ../tcos-configurator.py:631 #, python-format msgid "User already exists: '%s'" msgstr "El usuario ya existe: '%s'" #: ../tcos-configurator.py:637 ../tcos-configurator.py:972 #: ../tcos-configurator.py:996 ../tcos-configurator.py:1156 #: ../tcos-configurator.py:1178 msgid "Done" msgstr "Hecho" #: ../tcos-configurator.py:818 msgid "Configuring DNSMASQ service..." msgstr "Configurando servicio DNSMASQ..." #: ../tcos-configurator.py:925 msgid "" "Error writing /etc/dnsmasq.conf.\n" "Are you root?" msgstr "" "Error escribiendo /etc/dnsmasq.conf.\n" "¿Suficientes permisos?" #: ../tcos-configurator.py:962 ../tcos-configurator.py:1146 msgid "Configured static network" msgstr "Configurado modo de red estático" #: ../tcos-configurator.py:977 ../tcos-configurator.py:1161 msgid "ERROR:Error configuring static network." msgstr "ERROR:Error configurando la red estática." #: ../tcos-configurator.py:983 msgid "Restarting DNSMASQ service..." msgstr "Reiniciando servicio DNSMASQ..." #: ../tcos-configurator.py:998 msgid "Error restarting DNSMASQ server." msgstr "Error reiniciando servidor DNSMASQ" #: ../tcos-configurator.py:1006 msgid "Configuring DHCP service..." msgstr "Configurando servicio DHCP..." #: ../tcos-configurator.py:1100 msgid "" "Error writing /etc/dhcp3/dhcpd.conf.\n" "Are you root?" msgstr "" "Error escribiendo /etc/dhcp3/dhcpd.conf.\n" "¿Suficientes permisos?" #: ../tcos-configurator.py:1167 msgid "Restarting DHCP service..." msgstr "Reiniciando servicio DHCP..." #: ../tcos-configurator.py:1180 msgid "Error restarting DHCP server." msgstr "Error reiniciando servidor DHCP" tcos-configurator-1.23/po/Makefile0000644000000000000000000000223111771055762014064 0ustar LANGUAGES=es pt_BR gl fr PACKAGE=tcos-configurator all: clean: @rm -f *.mo *.gmo *autosave @for lang in $(LANGUAGES); do \ echo " **CLEAN** $$lang"; \ rm -rf $$lang;\ done files: find ../ -name "*.py" -o -name "*.glade" > FILES pot: xgettext -o $(PACKAGE).pot --files-from=FILES po: @for lang in $(LANGUAGES); do \ echo " **PO** $$lang"; \ if [ ! -f $$lang.po ]; then \ msginit --input $(PACKAGE).pot -o $$lang-old.po;\ else \ mv $$lang.po $$lang-old.po; \ fi ; \ msgmerge -o $$lang.po $$lang-old.po $(PACKAGE).pot; \ rm -f $$lang-old.po; \ done gmo: @echo "Compiling languages: $(LANGUAGES)" @for lang in $(LANGUAGES); do \ echo " **MO** $$lang" ; \ mkdir -p $$lang/LC_MESSAGES/; \ msgfmt -v -o $$lang/LC_MESSAGES/$(PACKAGE).mo $$lang.po; \ touch $$lang.gmo; \ done install: gmo @for lang in $(LANGUAGES); do \ echo " **INSTALL MO** $$lang" ; \ mkdir -p $(DESTDIR)/$(PREFIX)/share/locale/$$lang/LC_MESSAGES/; \ echo " Installing $$lang.mo into $(DESTDIR)/$(PREFIX)/share/locale/$$lang/LC_MESSAGES/$(PACKAGE).mo"; \ msgfmt -v -o $(DESTDIR)/$(PREFIX)/share/locale/$$lang/LC_MESSAGES/$(PACKAGE).mo $$lang.po; \ done tcos-configurator-1.23/po/pt_BR.po0000644000000000000000000002035411771055762014000 0ustar # translation of tcos-configurator. # Copyright (C) 2009 THE tcos-configurator'S COPYRIGHT HOLDER # This file is distributed under the same license as the tcos-configurator package. # <>, 2009. # , fuzzy # <>, 2009. # # msgid "" msgstr "" "Project-Id-Version: tcos-configurator 0.2.17~rc8\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-11-21 19:41+0100\n" "PO-Revision-Date: 2009-01-14 09:59-0300\n" "Last-Translator: Aécio dos Santos Pires \n" "Language-Team: Portuguese/Brazil\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../tcos-configurator.glade:9 msgid "TCOS Server configurator" msgstr "TCOS Server Configurator" #: ../tcos-configurator.glade:53 msgid "Configure TCOS server" msgstr "Configurando o servidor TCOS" #: ../tcos-configurator.glade:105 msgid "DHCP net interface" msgstr "Interface de rede DHCP" #: ../tcos-configurator.glade:150 msgid "Start IP" msgstr "IP inicial" #: ../tcos-configurator.glade:199 msgid "End IP" msgstr "IP final" #: ../tcos-configurator.glade:318 ../tcos-configurator.glade:861 #: ../tcos-configurator.glade:1140 msgid "Commit changes" msgstr "Aplicar as modificações" #: ../tcos-configurator.glade:357 msgid "Boot mode" msgstr "Método de Boot" #: ../tcos-configurator.glade:403 msgid "Server IP" msgstr "IP do servidor" #: ../tcos-configurator.glade:457 msgid "" "WARNING:\n" "Detected dynamic IP" msgstr "" "AVISO:\n" "IP dinâmico detectado" #: ../tcos-configurator.glade:484 msgid "" "configure this IP as static\n" "(disable NetworkManager)" msgstr "" "Configure este IP como estático\n" "(desabilitando o NetworkManager)" #: ../tcos-configurator.glade:516 msgid "host" msgstr "terminal" #: ../tcos-configurator.glade:539 msgid "Hostname prefix" msgstr "Prefixo do terminal" #: ../tcos-configurator.glade:606 msgid "DHCP server" msgstr "Servidor DHCP" #: ../tcos-configurator.glade:639 msgid "Numer of users to create" msgstr "Quantidade de usuário a serem criados" #: ../tcos-configurator.glade:667 msgid "Prefix" msgstr "Prefixo" #: ../tcos-configurator.glade:722 msgid "" "Groups to add users\n" "(use spaces to separate)\n" "(default fuse)\n" msgstr "" "Adicione estes usuário ao(s) grupo(s)\n" "(use o espaço em branco para\n" "separar os nomes dos grupos.\n" "O padrão é o fuse).\n" #: ../tcos-configurator.glade:778 msgid "user" msgstr "usuário" #: ../tcos-configurator.glade:900 msgid "Passwords are same string as username" msgstr "As senhas são palavras, assim como os nomes dos usuários" #: ../tcos-configurator.glade:934 msgid "Remote users" msgstr "Usuários Remotos" #: ../tcos-configurator.glade:975 msgid "enable autologin" msgstr "Habilitar o login automático" #: ../tcos-configurator.glade:995 msgid "" "Autologin timeout\n" "(in seconds)" msgstr "" "Inicie o autologin após\n" "(tempo em segundos)" #: ../tcos-configurator.glade:1046 msgid "" "Remote login\n" "(required for TCOS)" msgstr "" "Login remoto\n" "(requerido pelo TCOS)" #: ../tcos-configurator.glade:1076 msgid "enable remote login" msgstr "Habilitar o login remoto" #: ../tcos-configurator.glade:1212 msgid "Autologin" msgstr "Login automático" #: ../tcos-configurator.glade:1286 msgid "Login manager" msgstr "Gerenciador de Login" #: ../tcos-configurator.glade:1361 msgid "Launch TcosConfig" msgstr "Iniciar o TcosConfig" #: ../tcos-configurator.glade:1400 msgid "" "TcosConfig is a tool to generate TCOS network boot images. The images are " "downloaded using PXE protocol.\n" "\n" "You can add or remove some tools in images and configure a lot of hardware " "settings." msgstr "" "O TcosConfig é uma ferramenta para gerar as imagens de \n" "boot via rede. As imagens são obtidas usando o protocolo PXE.\n" "\n" "Você pode adicionar ou remover algumas ferramentas\n" "nas imagens, além de configurá-las para vários tipos\n" "de hardware." #: ../tcos-configurator.glade:1435 msgid "Boot images" msgstr "Imagens de Boot" #: ../tcos-configurator.glade:1492 msgid "Autologin help" msgstr "Ajuda para o Autologin" #: ../tcos-configurator.glade:1516 msgid "TCOS Autologin" msgstr "TCOS Autologin" #: ../tcos-configurator.glade:1541 msgid "" "TCOS can work in kiosk mode.\n" "\n" "All you need is to configure the hostnames with the same value " "as usernames.\n" "\n" "Example:" msgstr "" "O TCOS pode trabalhar no modo kiosk.\n" "\n" "Você precisa configurar os nomes dos \n" "terminais com os mesmos nomes dos usuários.\n" "\n" "Exemplo:" #: ../tcos-configurator.glade:1570 msgid "" "Users: from user01 to user15\n" "Hostnames: from user01 to user15" msgstr "" "Usuários: de usuario01 a usuario15\n" "Terminais: de usuario01 a usuario15" #: ../tcos-configurator.glade:1596 msgid "" "1.- Create users with tcos-configurator\n" "2.- Configure DHCP with a 15 IP's range (or more)\n" "3.- Edit /etc/hosts and add this:" msgstr "" "1.- Crie os usuários com o tcos-configurator\n" "2.- Configure no DHCP, uma faixa com 15 IP's (ou mais)\n" "3.- Edite o arquivo /etc/hosts e adicione:" #: ../tcos-configurator.glade:1623 msgid "" "192.168.0.101 user01\n" "192.168.0.102 user02\n" "192.168.0.103 user03\n" "...\n" "192.168.0.115 user15" msgstr "" "192.168.0.101 usuário01\n" "192.168.0.102 usuário02\n" "192.168.0.103 usuário03\n" "...\n" "192.168.0.115 usuário15" #: ../tcos-configurator.py:293 msgid "TCOS and Backharddi" msgstr "TCOS e Backharddi" #: ../tcos-configurator.py:294 ../tcos-configurator.py:299 msgid "TCOS" msgstr "TCOS" #: ../tcos-configurator.py:295 msgid "Backharddi" msgstr "Backharddi" #: ../tcos-configurator.py:464 msgid "" "WARNING:\n" "Network interface don't have IP" msgstr "" "AVISO:\n" "Essa interface de rede não possui IP" #: ../tcos-configurator.py:483 ../tcos-configurator.py:488 #, python-format msgid "" "Your %s file will be overwritten.\n" "\n" "Continue?" msgstr "" #: ../tcos-configurator.py:553 #, fuzzy msgid "" "Reboot required (or restart gdm/kdm daemon) to enable new GDM/KDM " "settings" msgstr "" "Reinicie o servidor (ou reinicie o daemon gdm) para habilitar as novas " "configurações do GDM." #: ../tcos-configurator.py:590 #, python-format msgid "Creating from %(prefix)s%(init)02d to %(prefix)s%(end)02d" msgstr "Criando de %(prefix)s%(init)02d a %(prefix)s%(end)02d" #: ../tcos-configurator.py:623 #, python-format msgid "Creating user: '%s'" msgstr "Criando os usuários: '%s'" #: ../tcos-configurator.py:631 #, python-format msgid "User already exists: '%s'" msgstr "Os seguintes usuários já existem: '%s'" #: ../tcos-configurator.py:637 ../tcos-configurator.py:972 #: ../tcos-configurator.py:996 ../tcos-configurator.py:1156 #: ../tcos-configurator.py:1178 msgid "Done" msgstr "Feito" #: ../tcos-configurator.py:818 #, fuzzy msgid "Configuring DNSMASQ service..." msgstr "Configurando o serviço DHCP..." #: ../tcos-configurator.py:925 #, fuzzy msgid "" "Error writing /etc/dnsmasq.conf.\n" "Are you root?" msgstr "" "Erro ao alterar o arquivo /etc/dhcp3/dhcpd.conf.\n" "Você é root?" #: ../tcos-configurator.py:962 ../tcos-configurator.py:1146 msgid "Configured static network" msgstr "A rede estática foi configurada" #: ../tcos-configurator.py:977 ../tcos-configurator.py:1161 msgid "ERROR:Error configuring static network." msgstr "ERRO:Erro ao configurar a rede estática." #: ../tcos-configurator.py:983 #, fuzzy msgid "Restarting DNSMASQ service..." msgstr "Reiniciando o serviço DHCP..." #: ../tcos-configurator.py:998 #, fuzzy msgid "Error restarting DNSMASQ server." msgstr "Erro ao reiniciar o serviço DHCP." #: ../tcos-configurator.py:1006 msgid "Configuring DHCP service..." msgstr "Configurando o serviço DHCP..." #: ../tcos-configurator.py:1100 msgid "" "Error writing /etc/dhcp3/dhcpd.conf.\n" "Are you root?" msgstr "" "Erro ao alterar o arquivo /etc/dhcp3/dhcpd.conf.\n" "Você é root?" #: ../tcos-configurator.py:1167 msgid "Restarting DHCP service..." msgstr "Reiniciando o serviço DHCP..." #: ../tcos-configurator.py:1180 msgid "Error restarting DHCP server." msgstr "Erro ao reiniciar o serviço DHCP." tcos-configurator-1.23/po/gl.po0000644000000000000000000002037511771055762013377 0ustar # Translation template for tcos-configurator # Copyright (C) 2008 Mario Izquierdo # This file is distributed under the same license as the tcos-configurator package. # Mario Izquierdo , 2008. # # msgid "" msgstr "" "Project-Id-Version: tcos-configurator 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-11-21 19:41+0100\n" "PO-Revision-Date: 2008-11-26 18:38+0100\n" "Last-Translator: Enrique Estévez Fernández \n" "Language-Team: Galician \n" "Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Language: Galician\n" #: ../tcos-configurator.glade:9 msgid "TCOS Server configurator" msgstr "Configurador do servidor TCOS" #: ../tcos-configurator.glade:53 msgid "Configure TCOS server" msgstr "Configurar servidor TCOS" #: ../tcos-configurator.glade:105 msgid "DHCP net interface" msgstr "Interface de rede DHCP" #: ../tcos-configurator.glade:150 msgid "Start IP" msgstr "IP de inicio" #: ../tcos-configurator.glade:199 msgid "End IP" msgstr "IP final" #: ../tcos-configurator.glade:318 ../tcos-configurator.glade:861 #: ../tcos-configurator.glade:1140 msgid "Commit changes" msgstr "Gardar cambios" #: ../tcos-configurator.glade:357 msgid "Boot mode" msgstr "Modo de arranque" #: ../tcos-configurator.glade:403 msgid "Server IP" msgstr "Enderezo IP" #: ../tcos-configurator.glade:457 msgid "" "WARNING:\n" "Detected dynamic IP" msgstr "" "ADVERTENCIA:\n" "Detectouse IP dinámica" #: ../tcos-configurator.glade:484 msgid "" "configure this IP as static\n" "(disable NetworkManager)" msgstr "" "configurar esta IP como estática\n" "(desahilita NetworkManager)" #: ../tcos-configurator.glade:516 msgid "host" msgstr "equipo" #: ../tcos-configurator.glade:539 msgid "Hostname prefix" msgstr "Prefixo de equipo" #: ../tcos-configurator.glade:606 msgid "DHCP server" msgstr "Servidor DHCP" #: ../tcos-configurator.glade:639 msgid "Numer of users to create" msgstr "Número de usuarios a crear" #: ../tcos-configurator.glade:667 msgid "Prefix" msgstr "Prefixo" #: ../tcos-configurator.glade:722 msgid "" "Groups to add users\n" "(use spaces to separate)\n" "(default fuse)\n" msgstr "" "Grupos que pertence o usuario\n" "(usar espacios para separar)\n" "(por defecto fuse)\n" #: ../tcos-configurator.glade:778 msgid "user" msgstr "usuario" #: ../tcos-configurator.glade:900 msgid "Passwords are same string as username" msgstr "Os contrasinais son o nome do usuario" #: ../tcos-configurator.glade:934 msgid "Remote users" msgstr "Usuarios remotos" #: ../tcos-configurator.glade:975 msgid "enable autologin" msgstr "activar inicio de sesión automático" #: ../tcos-configurator.glade:995 msgid "" "Autologin timeout\n" "(in seconds)" msgstr "" "Tempo de espera para\n" "inicio de sesión automática\n" "(en segundos)" #: ../tcos-configurator.glade:1046 msgid "" "Remote login\n" "(required for TCOS)" msgstr "" "Entrada remota\n" "(TCOS necesitao)" #: ../tcos-configurator.glade:1076 msgid "enable remote login" msgstr "activar entrada remota" #: ../tcos-configurator.glade:1212 msgid "Autologin" msgstr "Inicio de sesión automática" #: ../tcos-configurator.glade:1286 msgid "Login manager" msgstr "Xestor de entrada" #: ../tcos-configurator.glade:1361 msgid "Launch TcosConfig" msgstr "Executar TcosConfig" #: ../tcos-configurator.glade:1400 msgid "" "TcosConfig is a tool to generate TCOS network boot images. The images are " "downloaded using PXE protocol.\n" "\n" "You can add or remove some tools in images and configure a lot of hardware " "settings." msgstr "" "TcosConfig é unha ferramenta para xerar imaxes de arranque TCOS. As imaxes " "descargaranse pola rede mediante o protocolo PXE.\n" "\n" "Podes engadir ou quitar algunhas ferramentas, asi como configurar variables " "de hardware." #: ../tcos-configurator.glade:1435 msgid "Boot images" msgstr "Imaxes de arranque" #: ../tcos-configurator.glade:1492 msgid "Autologin help" msgstr "Axuda para o inicio de sesión automático" #: ../tcos-configurator.glade:1516 msgid "TCOS Autologin" msgstr "Inicio de sesión automática TCOS" #: ../tcos-configurator.glade:1541 msgid "" "TCOS can work in kiosk mode.\n" "\n" "All you need is to configure the hostnames with the same value " "as usernames.\n" "\n" "Example:" msgstr "" "TCOS pode funcionar en modo quiosco.\n" "\n" "Todo o que necesitas é configurar os nomes de equipo co mesmo " "prefixo de nome de equipo e nome de usuario\n" "\n" "Exemplo:" #: ../tcos-configurator.glade:1570 msgid "" "Users: from user01 to user15\n" "Hostnames: from user01 to user15" msgstr "" "Usuarios: dende usuario01 a usuario15\n" "Nome de equipo: dende usuario01 a usuario15" #: ../tcos-configurator.glade:1596 msgid "" "1.- Create users with tcos-configurator\n" "2.- Configure DHCP with a 15 IP's range (or more)\n" "3.- Edit /etc/hosts and add this:" msgstr "" "1.- Crea os usuarios con tcos-configurator\n" "2.- Configura o servidor DHCP con ao menos un rango de 15 enderezos " "IP\n" "3.- Edita /etc/hosts e engade esto:" #: ../tcos-configurator.glade:1623 msgid "" "192.168.0.101 user01\n" "192.168.0.102 user02\n" "192.168.0.103 user03\n" "...\n" "192.168.0.115 user15" msgstr "" "192.168.0.101 usuario01\n" "192.168.0.102 usuario02\n" "192.168.0.103 usuario03\n" "...\n" "192.168.0.115 usuario15" #: ../tcos-configurator.py:293 msgid "TCOS and Backharddi" msgstr "TCOS e Backharddi" #: ../tcos-configurator.py:294 ../tcos-configurator.py:299 msgid "TCOS" msgstr "TCOS" #: ../tcos-configurator.py:295 msgid "Backharddi" msgstr "Backharddi" #: ../tcos-configurator.py:464 msgid "" "WARNING:\n" "Network interface don't have IP" msgstr "" "AVISO:\n" "A interface de rede no ten IP" #: ../tcos-configurator.py:483 ../tcos-configurator.py:488 #, python-format msgid "" "Your %s file will be overwritten.\n" "\n" "Continue?" msgstr "" #: ../tcos-configurator.py:553 #, fuzzy msgid "" "Reboot required (or restart gdm/kdm daemon) to enable new GDM/KDM " "settings" msgstr "" "Necesitase reiniciar o equipo (ou o proceso gdm) para activar a nova " "configuración de GDM" #: ../tcos-configurator.py:590 #, python-format msgid "Creating from %(prefix)s%(init)02d to %(prefix)s%(end)02d" msgstr "Creando dende %(prefix)s%(init)02d ata %(prefix)s%(end)02d" #: ../tcos-configurator.py:623 #, python-format msgid "Creating user: '%s'" msgstr "Creando usuario: '%s'" #: ../tcos-configurator.py:631 #, python-format msgid "User already exists: '%s'" msgstr "O usuario xa existe: '%s'" #: ../tcos-configurator.py:637 ../tcos-configurator.py:972 #: ../tcos-configurator.py:996 ../tcos-configurator.py:1156 #: ../tcos-configurator.py:1178 msgid "Done" msgstr "Feito" #: ../tcos-configurator.py:818 #, fuzzy msgid "Configuring DNSMASQ service..." msgstr "Configurando servizo DHCP..." #: ../tcos-configurator.py:925 #, fuzzy msgid "" "Error writing /etc/dnsmasq.conf.\n" "Are you root?" msgstr "" "Erro escribindo /etc/dhcp3/dhcpd.conf.\n" "¿Suficientes permisos?" #: ../tcos-configurator.py:962 ../tcos-configurator.py:1146 msgid "Configured static network" msgstr "Configurado modo de rede estático" #: ../tcos-configurator.py:977 ../tcos-configurator.py:1161 msgid "ERROR:Error configuring static network." msgstr "ERRO:Erro configurando a rede estática." #: ../tcos-configurator.py:983 #, fuzzy msgid "Restarting DNSMASQ service..." msgstr "Reiniciando servizo DHCP..." #: ../tcos-configurator.py:998 #, fuzzy msgid "Error restarting DNSMASQ server." msgstr "Erro reiniciando servidor DHCP" #: ../tcos-configurator.py:1006 msgid "Configuring DHCP service..." msgstr "Configurando servizo DHCP..." #: ../tcos-configurator.py:1100 msgid "" "Error writing /etc/dhcp3/dhcpd.conf.\n" "Are you root?" msgstr "" "Erro escribindo /etc/dhcp3/dhcpd.conf.\n" "¿Suficientes permisos?" #: ../tcos-configurator.py:1167 msgid "Restarting DHCP service..." msgstr "Reiniciando servizo DHCP..." #: ../tcos-configurator.py:1180 msgid "Error restarting DHCP server." msgstr "Erro reiniciando servidor DHCP" tcos-configurator-1.23/po/FILES0000644000000000000000000000006311771055762013212 0ustar ../tcos-configurator.glade ../tcos-configurator.py tcos-configurator-1.23/tcos-configurator.py0000777000000000000000000000000011771055762021422 2tcos-configuratorustar tcos-configurator-1.23/setup.py0000755000000000000000000000470111771055762013527 0ustar #!/usr/bin/python # -*- coding: UTF-8 -*- # TcosConfigurator version __VERSION__ # # Copyright (c) 2006-2011 Mario Izquierdo # # This package 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 package 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. # # This script is inspired by the debian package python-chardet import os import glob from distutils.core import setup from distutils.command.build import build data_files = [] def get_debian_version(): f=open('debian/changelog', 'r') line=f.readline() f.close() version=line.split()[1].replace('(','').replace(')','') return version class build_locales(build): os.system("cd po && make gmo") for (path, dirs, files) in os.walk("po"): if "tcos-configurator.mo" in files: target = path.replace("po", "share/locale", 1) data_files.append((target, [os.path.join(path, "tcos-configurator.mo")])) def get_images(ipath): images = [] for afile in glob.glob('%s/*'%(ipath) ): if os.path.isfile(afile): images.append(afile) return images data_files.append(('share/tcos-configurator/images', get_images("images") )) data_files.append(('share/tcos-configurator', ['tcos-configurator.ui'] )) data_files.append(('share/applications', ['tcos-configurator.desktop'] )) data_files.append(('sbin', ['tcos-configurator'] )) data_files.append(('share/man/man1', ['tcos-configurator.1'] )) setup(name='TcosConfigurator', description = 'Configure TCOS server services', version=get_debian_version(), author = 'Mario Izquierdo', author_email = 'mariodebian@gmail.com', url = 'http://www.tcosproject.org', license = 'GPLv2', platforms = ['linux'], keywords = ['thin client', 'teacher monitor', 'ltsp'], #scripts=['tcos-configurator'], cmdclass = {'build': build_locales}, data_files=data_files ) tcos-configurator-1.23/tcos-configurator.desktop0000644000000000000000000000062511771055762017056 0ustar [Desktop Entry] Version=1.0 Name=TCOS Server Configurator Name[es]=Configurador servidor TCOS Comment=Configure TCOS server daemons and users Comment[es]=Configurar servicios y usuarios del servidor TCOS Exec=su-to-root -X -c /usr/sbin/tcos-configurator Terminal=false Type=Application Icon=/usr/share/tcos-configurator/images/tcos-icon-32x32.png Categories=GNOME;Settings;System;DesktopSettings;Monitor