moved pythonrewrite branch to trunk

This commit is contained in:
lars 2006-11-06 16:05:00 +00:00
parent 214959e851
commit 414389951e
230 changed files with 56027 additions and 1620 deletions

View file

@ -532,7 +532,7 @@ if ( ! &check_ssl()) {
if ($device eq '') {
&debug_msg(DEBUG_INFO, "invalid device: " . $query->param('device'));
$pagedata->setValue('Data.Warning', 'InvalidDevice');
$pagedata->setValue('Data.Action', 'empty');
$pagedata->setValue('Data.Action', 'emptu');
} elsif ( ! &check_config()) {
$pagedata->setValue('Data.Warning', 'NotInitialized');
$pagedata->setValue('Data.Action', 'form_init');

276
bin/CryptoBox.py Executable file
View file

@ -0,0 +1,276 @@
#!/usr/bin/env python2.4
'''
This is the web interface for a fileserver managing encrypted filesystems.
It was originally written in bash/perl. Now a complete rewrite is in
progress. So things might be confusing here. Hopefully not for long.
:)
'''
# check python version
import sys
(ver_major, ver_minor, ver_sub, ver_desc, ver_subsub) = sys.version_info
if (ver_major < 2) or ((ver_major == 2) and (ver_minor < 4)):
sys.stderr.write("You need a python version >= 2.4\nCurrent version is:\n %s\n" % sys.version)
sys.exit(1)
import CryptoBoxContainer
from CryptoBoxExceptions import *
import re
import os
import CryptoBoxTools
import subprocess
class CryptoBox:
'''this class rules them all!
put things like logging, conf and oter stuff in here,
that might be used by more classes, it will be passed on to them'''
VERSION = "0.3~1"
def __init__(self, config_file=None):
import CryptoBoxSettings
self.log = self.__getStartupLogger()
self.prefs = CryptoBoxSettings.CryptoBoxSettings(config_file)
self.__runTests()
def __getStartupLogger(self):
import logging
'''initialises the logging system
use it with: 'self.log.[debug|info|warning|error|critical](logmessage)'
all classes should get the logging instance during __init__:
self.log = logging.getLogger("CryptoBox")
first we output all warnings/errors to stderr
as soon as we opened the config file successfully, we redirect debug output
to the configured destination'''
## basicConfig(...) needs python >= 2.4
try:
log_handler = logging.getLogger("CryptoBox")
logging.basicConfig(
format='%(asctime)s CryptoBox %(levelname)s: %(message)s',
stderr=sys.stderr)
log_handler.setLevel(logging.ERROR)
log_handler.info("loggingsystem is up'n running")
## from now on everything can be logged via self.log...
except:
raise CBEnvironmentError("couldn't initialise the loggingsystem. I give up.")
return log_handler
# do some initial checks
def __runTests(self):
self.__runTestUID()
self.__runTestRootPriv()
def __runTestUID(self):
if os.geteuid() == 0:
raise CBEnvironmentError("you may not run the cryptobox as root")
def __runTestRootPriv(self):
"""try to run 'super' with 'CryptoBoxRootActions'"""
try:
devnull = open(os.devnull, "w")
except IOError:
raise CBEnvironmentError("could not open %s for writing!" % os.devnull)
try:
prog_super = self.prefs["Programs"]["super"]
except KeyError:
raise CBConfigUndefinedError("Programs", "super")
try:
prog_rootactions = self.prefs["Programs"]["CryptoBoxRootActions"]
except KeyError:
raise CBConfigUndefinedError("Programs", "CryptoBoxRootActions")
try:
proc = subprocess.Popen(
shell = False,
stdout = devnull,
stderr = devnull,
args = [prog_super, prog_rootactions, "check"])
except OSError:
raise CBEnvironmentError("failed to execute 'super' (%s)" % self.prefs["Programs"]["super"])
proc.wait()
if proc.returncode != 0:
raise CBEnvironmentError("failed to call CryptoBoxRootActions (%s) via 'super' - maybe you did not add the appropriate line to /etc/super.tab?" % prog_rootactions)
# this method just demonstrates inheritance effects - may be removed
def cbx_inheritance_test(self, string="you lucky widow"):
self.log.info(string)
# RFC: why should CryptoBoxProps inherit CryptoBox? [l]
# RFC: shouldn't we move all useful functions of CryptoBoxProps to CryptoBox? [l]
class CryptoBoxProps(CryptoBox):
'''Get and set the properties of a CryptoBox
This class contains all available devices that may be accessed.
All properties of the cryptobox can be accessed by this class.
'''
def __init__(self, config_file=None):
'''read config and fill class variables'''
CryptoBox.__init__(self, config_file)
self.reReadContainerList()
def reReadContainerList(self):
self.log.debug("rereading container list")
self.containers = []
for device in CryptoBoxTools.getAvailablePartitions():
if self.isDeviceAllowed(device) and not self.isConfigPartition(device):
self.containers.append(CryptoBoxContainer.CryptoBoxContainer(device, self))
## sort by container name
self.containers.sort(cmp = lambda x,y: x.getName() < y.getName() and -1 or 1)
def isConfigPartition(self, device):
proc = subprocess.Popen(
shell = False,
stdout = subprocess.PIPE,
args = [
self.prefs["Programs"]["blkid"],
"-c", os.path.devnull,
"-o", "value",
"-s", "LABEL",
device])
(output, error) = proc.communicate()
return output.strip() == self.prefs["Main"]["ConfigVolumeLabel"]
def isDeviceAllowed(self, devicename):
"check if a device is white-listed for being used as cryptobox containers"
import types
allowed = self.prefs["Main"]["AllowedDevices"]
if type(allowed) == types.StringType: allowed = [allowed]
for a_dev in allowed:
"remove double dots and so on ..."
real_device = os.path.realpath(devicename)
if a_dev and re.search('^' + a_dev, real_device): return True
return False
def getLogData(self, lines=None, maxSize=None):
"""get the most recent log entries of the cryptobox
the maximum number and size of these entries can be limited by 'lines' and 'maxSize'
"""
# return nothing if the currently selected log output is not a file
try:
if self.prefs["Log"]["Destination"].upper() != "FILE": return []
log_file = self.prefs["Log"]["Details"]
except KeyError:
self.log.error("could not evaluate one of the following config settings: [Log]->Destination or [Log]->Details")
return []
try:
fd = open(log_file, "r")
if maxSize: fd.seek(-maxSize, 2) # seek relative to the end of the file
content = fd.readlines()
fd.close()
except IOError:
self.log.warn("failed to read the log file (%s)" % log_file)
return []
if lines: content = content[-lines:]
content.reverse()
return content
def getContainerList(self, filterType=None, filterName=None):
"retrieve the list of all containers of this cryptobox"
try:
result = self.containers[:]
if filterType != None:
if filterType in range(len(CryptoBoxContainer.Types)):
return [e for e in self.containers if e.getType() == filterType]
else:
self.log.info("invalid filterType (%d)" % filterType)
result.clear()
if filterName != None:
result = [e for e in self.containers if e.getName() == filterName]
return result
except AttributeError:
return []
def getContainer(self, device):
"retrieve the container element for this device"
all = [e for e in self.getContainerList() if e.device == device]
if all:
return all[0]
else:
return None
def setNameForUUID(self, uuid, name):
"assign a name to a uuid in the ContainerNameDatabase"
used_uuid = self.getUUIDForName(name)
"first remove potential conflicting uuid/name combination"
if used_uuid:
## remember the container which name was overriden
for e in self.containers:
if e.getName() == name:
forcedRename = e
break
del self.prefs.nameDB[used_uuid]
self.prefs.nameDB[uuid] = name
self.prefs.nameDB.write()
## rename the container that lost its name (necessary while we use cherrypy)
if used_uuid:
## this is surely not the best way to regenerate the name
dev = e.getDevice()
old_index = self.containers.index(e)
self.containers.remove(e)
self.containers.insert(old_index, CryptoBoxContainer.CryptoBoxContainer(dev,self))
## there should be no reason for any failure
return True
def getNameForUUID(self, uuid):
"get the name belonging to a specified key (usually the UUID of a fs)"
try:
return self.prefs.nameDB[uuid]
except KeyError:
return None
def getUUIDForName(self, name):
""" get the key belonging to a value in the ContainerNameDatabase
this is the reverse action of 'getNameForUUID' """
for key in self.prefs.nameDB.keys():
if self.prefs.nameDB[key] == name: return key
"the uuid was not found"
return None
def removeUUID(self, uuid):
if uuid in self.prefs.nameDB.keys():
del self.prefs.nameDB[uuid]
return True
else:
return False
def getAvailableLanguages(self):
'''reads all files in path LangDir and returns a list of
basenames from existing hdf files, that should are all available
languages'''
languages = [ f.rstrip(".hdf")
for f in os.listdir(self.prefs["Locations"]["LangDir"])
if f.endswith(".hdf") ]
if len(languages) < 1:
self.log.error("No .hdf files found! The website won't render properly.")
return languages
if __name__ == "__main__":
cb = CryptoBoxProps()

607
bin/CryptoBoxContainer.py Executable file
View file

@ -0,0 +1,607 @@
#!/usr/bin/env python2.4
## check python version
import sys
(ver_major, ver_minor, ver_sub, ver_desc, ver_subsub) = sys.version_info
if (ver_major < 2) or ((ver_major == 2) and (ver_minor < 4)):
sys.stderr.write("You need a python version >= 2.4\nCurrent version is:\n %s\n" % sys.version)
sys.exit(1)
import subprocess
import os
import re
import logging
from CryptoBoxExceptions import *
"""exceptions:
VolumeIsActive
NameActivelyUsed
InvalidName
InvalidPassword
InvalidType
CreateError
MountError
ChangePasswordError
"""
class CryptoBoxContainer:
Types = {
"unused":0,
"plain":1,
"luks":2,
"swap":3}
__fsTypes = {
"plain":["ext3", "ext2", "vfat", "reiser"],
"swap":["swap"]}
# TODO: more filesystem types? / check 'reiser'
__dmDir = "/dev/mapper"
def __init__(self, device, cbox):
self.device = device
self.cbox = cbox
self.log = logging.getLogger("CryptoBox")
self.resetObject()
def getName(self):
return self.name
def setName(self, new_name):
if new_name == self.name: return
if self.isMounted():
raise CBVolumeIsActive("the container must be inactive during renaming")
if not re.search(r'^[a-zA-Z0-9_\.\- ]+$', new_name):
raise CBInvalidName("the supplied new name contains illegal characters")
"check for active partitions with the same name"
prev_name_owner = self.cbox.getContainerList(filterName=new_name)
if prev_name_owner:
for a in prev_name_owner:
if a.isMounted():
raise CBNameActivelyUsed("the supplied new name is already in use for an active partition")
if not self.cbox.setNameForUUID(self.uuid, new_name):
raise CBContainerError("failed to change the volume name for unknown reasons")
self.name = new_name
def getDevice(self):
return self.device
def getType(self):
return self.type
def isMounted(self):
return os.path.ismount(self.__getMountPoint())
def getCapacity(self):
"""return the current capacity state of the volume
the volume may not be mounted
the result is a tuple of values in megabyte:
(size, available, used)
"""
info = os.statvfs(self.__getMountPoint())
return (
int(info.f_bsize*info.f_blocks/1024/1024),
int(info.f_bsize*info.f_bavail/1024/1024),
int(info.f_bsize*(info.f_blocks-info.f_bavail)/1024/1024))
def getSize(self):
"""return the size of the block device (_not_ of the filesystem)
the result is a value in megabyte
an error is indicated by "-1"
"""
import CryptoBoxTools
return CryptoBoxTools.getBlockDeviceSize(self.device)
def resetObject(self):
""" recheck the information about this container
this is especially useful after changing the type via 'create' """
self.uuid = self.__getUUID()
self.type = self.__getTypeOfPartition()
self.name = self.__getNameOfContainer()
if self.type == self.Types["luks"]:
self.mount = self.__mountLuks
self.umount = self.__umountLuks
elif self.type == self.Types["plain"]:
self.mount = self.__mountPlain
self.umount = self.__umountPlain
def create(self, type, password=None):
old_name = self.getName()
if type == self.Types["luks"]:
self.__createLuks(password)
elif type == self.Types["plain"]:
self.__createPlain()
else:
raise CBInvalidType("invalid container type (%d) supplied" % (type, ))
## no exception was raised during creation -> we can continue
## reset the properties (encryption state, ...) of the device
self.resetObject()
## restore the old name (must be after resetObject)
self.setName(old_name)
def changePassword(self, oldpw, newpw):
if self.type != self.Types["luks"]:
raise CBInvalidType("changing of password is possible only for luks containers")
if not oldpw:
raise CBInvalidPassword("no old password supplied for password change")
if not newpw:
raise CBInvalidPassword("no new password supplied for password change")
"return if new and old passwords are the same"
if oldpw == newpw: return
if self.isMounted():
raise CBVolumeIsActive("this container is currently active")
devnull = None
try:
devnull = open(os.devnull, "w")
except IOError:
self.log.warn("Could not open %s" % (os.devnull, ))
"remove any potential open luks mapping"
self.__umountLuks()
"create the luks header"
proc = subprocess.Popen(
shell = False,
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
args = [
self.cbox.prefs["Programs"]["super"],
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
"cryptsetup",
"luksAddKey",
self.device,
"--batch-mode"])
proc.stdin.write("%s\n%s" % (oldpw, newpw))
(output, errout) = proc.communicate()
if proc.returncode != 0:
errorMsg = "Could not add a new luks key: %s - %s" % (output.strip(), errout.strip(), )
self.log.error(errorMsg)
raise CBChangePasswordError(errorMsg)
## retrieve the key slot we used for unlocking
keys_found = re.search(r'key slot (\d{1,3}) unlocked', output).groups()
if keys_found:
keyslot = int(keys_found[0])
else:
raise CBChangePasswordError("could not get the old key slot")
"remove the old key"
proc = subprocess.Popen(
shell = False,
stdin = None,
stdout = devnull,
stderr = subprocess.PIPE,
args = [
self.cbox.prefs["Programs"]["cryptsetup"],
"--batch-mode",
"luksDelKey",
self.device,
"%d" % (keyslot, )])
proc.wait()
if proc.returncode != 0:
errorMsg = "Could not remove the old luks key: %s" % (proc.stderr.read().strip(), )
self.log.error(errorMsg)
raise CBChangePasswordError(errorMsg)
" ****************** internal stuff ********************* "
def __getNameOfContainer(self):
"retrieve the name of the container by querying the database"
def_name = self.cbox.getNameForUUID(self.uuid)
if def_name: return def_name
"there is no name defined for this uuid - we will propose a good one"
prefix = self.cbox.prefs["Main"]["DefaultVolumePrefix"]
unused_found = False
counter = 1
while not unused_found:
guess = prefix + str(counter)
if self.cbox.getUUIDForName(guess):
counter += 1
else:
unused_found = True
self.cbox.setNameForUUID(self.uuid, guess)
return guess
def __getUUID(self):
if self.__getTypeOfPartition() == self.Types["luks"]:
guess = self.__getLuksUUID()
else:
guess = self.__getNonLuksUUID()
## did we get a valid value?
if guess:
return guess
else:
## emergency default value
return self.device.replace(os.path.sep, "_")
def __getLuksUUID(self):
"""get uuid for luks devices"""
proc = subprocess.Popen(
shell = False,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
args = [self.cbox.prefs["Programs"]["cryptsetup"],
"luksUUID",
self.device])
(stdout, stderr) = proc.communicate()
if proc.returncode != 0:
self.cbox.log.info("could not retrieve luks uuid (%s): %s", (self.device, stderr.strip()))
return None
return stdout.strip()
def __getNonLuksUUID(self):
"""return UUID for ext2/3 and vfat filesystems"""
try:
devnull = open(os.devnull, "w")
except IOError:
self.warn("Could not open %s" % (os.devnull, ))
proc = subprocess.Popen(
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
args=[self.cbox.prefs["Programs"]["blkid"],
"-s", "UUID",
"-o", "value",
"-c", os.devnull,
"-w", os.devnull,
self.device])
(stdout, stderr) = proc.communicate()
devnull.close()
## execution failed?
if proc.returncode != 0:
self.log.info("retrieving of partition type (%s) via 'blkid' failed: %s - maybe it is encrypted?" % (self.device, stderr.strip()))
return None
## return output of blkid
return stdout.strip()
def __getTypeOfPartition(self):
"retrieve the type of the given partition (see CryptoBoxContainer.Types)"
if self.__isLuksPartition(): return self.Types["luks"]
typeOfPartition = self.__getTypeIdOfPartition()
if typeOfPartition in self.__fsTypes["plain"]:
return self.Types["plain"]
if typeOfPartition in self.__fsTypes["swap"]:
return self.Types["swap"]
return self.Types["unused"]
def __getTypeIdOfPartition(self):
"returns the type of the partition (see 'man blkid')"
devnull = None
try:
devnull = open(os.devnull, "w")
except IOError:
self.log.warn("Could not open %s" % (os.devnull, ))
proc = subprocess.Popen(
shell=False,
stdin=None,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
args=[self.cbox.prefs["Programs"]["blkid"],
"-s", "TYPE",
"-o", "value",
"-c", os.devnull,
"-w", os.devnull,
self.device])
proc.wait()
output = proc.stdout.read().strip()
if proc.returncode != 0:
self.log.warn("retrieving of partition type via 'blkid' failed: %s" % (proc.stderr.read().strip(), ))
return None
devnull.close()
return output
def __isLuksPartition(self):
"check if the given device is a luks partition"
devnull = None
try:
devnull = open(os.devnull, "w")
except IOError:
self.log.warn("Could not open %s" % (os.devnull, ))
proc = subprocess.Popen(
shell = False,
stdin = None,
stdout = devnull,
stderr = devnull,
args = [
self.cbox.prefs["Programs"]["cryptsetup"],
"--batch-mode",
"isLuks",
self.device])
proc.wait()
devnull.close()
return proc.returncode == 0
def __getMountPoint(self):
"return the name of the mountpoint of this volume"
return os.path.join(self.cbox.prefs["Locations"]["MountParentDir"], self.name)
def __mountLuks(self, password):
"mount a luks partition"
if not password:
raise CBInvalidPassword("no password supplied for luksOpen")
if self.isMounted(): raise CBVolumeIsActive("this container is already active")
self.__umountLuks()
try:
devnull = open(os.devnull, "w")
except IOError:
self.log.warn("Could not open %s" % (os.devnull, ))
self.__cleanMountDirs()
if not os.path.exists(self.__getMountPoint()):
os.mkdir(self.__getMountPoint())
if not os.path.exists(self.__getMountPoint()):
errorMsg = "Could not create mountpoint (%s)" % (self.__getMountPoint(), )
self.log.error(errorMsg)
raise CBMountError(errorMsg)
proc = subprocess.Popen(
shell = False,
stdin = subprocess.PIPE,
stdout = devnull,
stderr = subprocess.PIPE,
args = [
self.cbox.prefs["Programs"]["super"],
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
"cryptsetup",
"luksOpen",
self.device,
self.name,
"--batch-mode"])
proc.stdin.write(password)
(output, errout) = proc.communicate()
if proc.returncode != 0:
errorMsg = "Could not open the luks mapping: %s" % (errout.strip(), )
self.log.warn(errorMsg)
raise CBMountError(errorMsg)
proc = subprocess.Popen(
shell = False,
stdin = None,
stdout = devnull,
stderr = subprocess.PIPE,
args = [
self.cbox.prefs["Programs"]["super"],
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
"mount",
os.path.join(self.__dmDir, self.name),
self.__getMountPoint()])
proc.wait()
if proc.returncode != 0:
errorMsg = "Could not mount the filesystem: %s" % (proc.stderr.read().strip(), )
self.log.warn(errorMsg)
raise CBMountError(errorMsg)
devnull.close()
def __umountLuks(self):
"umount a luks partition"
devnull = None
try:
devnull = open(os.devnull, "w")
except IOError:
self.log.warn("Could not open %s" % (os.devnull, ))
if self.isMounted():
proc = subprocess.Popen(
shell = False,
stdin = None,
stdout = devnull,
stderr = subprocess.PIPE,
args = [
self.cbox.prefs["Programs"]["super"],
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
"umount",
self.__getMountPoint()])
proc.wait()
if proc.returncode != 0:
errorMsg = "Could not umount the filesystem: %s" % (proc.stderr.read().strip(), )
self.log.warn(errorMsg)
raise CBUmountError(errorMsg)
if os.path.exists(os.path.join(self.__dmDir, self.name)):
proc = subprocess.Popen(
shell = False,
stdin = None,
stdout = devnull,
stderr = subprocess.PIPE,
args = [
self.cbox.prefs["Programs"]["super"],
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
"cryptsetup",
"luksClose",
self.name,
"--batch-mode"])
proc.wait()
if proc.returncode != 0:
errorMsg = "Could not remove the luks mapping: %s" % (proc.stderr.read().strip(), )
self.log.warn(errorMsg)
raise CBUmountError(errorMsg)
devnull.close()
def __mountPlain(self):
"mount a plaintext partition"
if self.isMounted(): raise CBVolumeIsActive("this container is already active")
devnull = None
try:
devnull = open(os.devnull, "w")
except IOError:
self.log.warn("Could not open %s" % (os.devnull, ))
self.__cleanMountDirs()
if not os.path.exists(self.__getMountPoint()):
os.mkdir(self.__getMountPoint())
if not os.path.exists(self.__getMountPoint()):
errorMsg = "Could not create mountpoint (%s)" % (self.__getMountPoint(), )
self.log.error(errorMsg)
raise CBMountError(errorMsg)
proc = subprocess.Popen(
shell = False,
stdin = None,
stdout = devnull,
stderr = subprocess.PIPE,
args = [
self.cbox.prefs["Programs"]["super"],
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
"mount",
self.device,
self.__getMountPoint()])
proc.wait()
if proc.returncode != 0:
errorMsg = "Could not mount the filesystem: %s" % (proc.stderr.read().strip(), )
self.log.warn(errorMsg)
raise CBMountError(errorMsg)
devnull.close()
def __umountPlain(self):
"umount a plaintext partition"
devnull = None
try:
devnull = open(os.devnull, "w")
except IOError:
self.log.warn("Could not open %s" % (os.devnull, ))
if self.isMounted():
proc = subprocess.Popen(
shell = False,
stdin = None,
stdout = devnull,
stderr = subprocess.PIPE,
args = [
self.cbox.prefs["Programs"]["super"],
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
"umount",
self.__getMountPoint()])
proc.wait()
if proc.returncode != 0:
errorMsg = "Could not umount the filesystem: %s" % (proc.stderr.read().strip(), )
self.log.warn(errorMsg)
raise CBUmountError(errorMsg)
devnull.close()
def __createPlain(self):
"make a plaintext partition"
if self.isMounted():
raise CBVolumeIsActive("deactivate the partition before filesystem initialization")
devnull = None
try:
devnull = open(os.devnull, "w")
except IOError:
self.log.warn("Could not open %s" % (os.devnull, ))
proc = subprocess.Popen(
shell = False,
stdin = None,
stdout = devnull,
stderr = subprocess.PIPE,
args = [
self.cbox.prefs["Programs"]["mkfs-data"],
self.device])
proc.wait()
if proc.returncode != 0:
errorMsg = "Could not create the filesystem: %s" % (proc.stderr.read().strip(), )
self.log.error(errorMsg)
raise CBCreateError(errorMsg)
devnull.close()
def __createLuks(self, password):
"make a luks partition"
if not password:
raise CBInvalidPassword("no password supplied for new luks mapping")
if self.isMounted():
raise CBVolumeIsActive("deactivate the partition before filesystem initialization")
devnull = None
try:
devnull = open(os.devnull, "w")
except IOError:
self.log.warn("Could not open %s" % (os.devnull, ))
"remove any potential open luks mapping"
self.__umountLuks()
"create the luks header"
proc = subprocess.Popen(
shell = False,
stdin = subprocess.PIPE,
stdout = devnull,
stderr = subprocess.PIPE,
args = [
self.cbox.prefs["Programs"]["super"],
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
"cryptsetup",
"luksFormat",
self.device,
"--batch-mode",
"--cipher", self.cbox.prefs["Main"]["DefaultCipher"],
"--iter-time", "2000"])
proc.stdin.write(password)
(output, errout) = proc.communicate()
if proc.returncode != 0:
errorMsg = "Could not create the luks header: %s" % (errout.strip(), )
self.log.error(errorMsg)
raise CBCreateError(errorMsg)
"open the luks container for mkfs"
proc = subprocess.Popen(
shell = False,
stdin = subprocess.PIPE,
stdout = devnull,
stderr = subprocess.PIPE,
args = [
self.cbox.prefs["Programs"]["super"],
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
"cryptsetup",
"luksOpen",
self.device,
self.name,
"--batch-mode"])
proc.stdin.write(password)
(output, errout) = proc.communicate()
if proc.returncode != 0:
errorMsg = "Could not open the new luks mapping: %s" % (errout.strip(), )
self.log.error(errorMsg)
raise CBCreateError(errorMsg)
"make the filesystem"
proc = subprocess.Popen(
shell = False,
stdin = None,
stdout = devnull,
stderr = subprocess.PIPE,
args = [
self.cbox.prefs["Programs"]["mkfs-data"],
os.path.join(self.__dmDir, self.name)])
proc.wait()
"remove the mapping - for every exit status"
self.__umountLuks()
if proc.returncode != 0:
errorMsg = "Could not create the filesystem: %s" % (proc.stderr.read().strip(), )
self.log.error(errorMsg)
"remove the luks mapping"
raise CBCreateError(errorMsg)
devnull.close()
def __cleanMountDirs(self):
""" remove all unnecessary subdirs of the mount parent directory
this should be called for every (u)mount """
subdirs = os.listdir(self.cbox.prefs["Locations"]["MountParentDir"])
for dir in subdirs:
abs_dir = os.path.join(self.cbox.prefs["Locations"]["MountParentDir"], dir)
if (not os.path.islink(abs_dir)) and os.path.isdir(abs_dir) and (not os.path.ismount(abs_dir)):
os.rmdir(abs_dir)

107
bin/CryptoBoxExceptions.py Normal file
View file

@ -0,0 +1,107 @@
"""
exceptions of the cryptobox package
"""
class CryptoBoxError(Exception):
"""base class for exceptions of the cryptobox"""
pass
class CBConfigError(CryptoBoxError):
"""any kind of error related to the configuration of a cryptobox"""
pass
class CBConfigUnavailableError(CBConfigError):
"""config file/input was not available at all"""
def __init__(self, source=None):
self.source = source
def __str__(self):
if self.source:
return "failed to access the configuration of the cryptobox: %s" % self.source
else:
return "failed to access the configuration of the cryptobox"
class CBConfigUndefinedError(CBConfigError):
"""a specific configuration setting was not defined"""
def __init__(self, section, name=None):
self.section = section
self.name = name
def __str__(self):
# is it a settings or a section?
if self.name:
# setting
return "undefined configuration setting: [%s]->%s - please check your configuration file" % (self.section, self.name)
else:
# section
return "undefined configuration section: [%s] - please check your configuration file" % (self.section, )
class CBConfigInvalidValueError(CBConfigError):
"""a configuration setting was invalid somehow"""
def __init__(self, section, name, value, reason):
self.section = section
self.name = name
self.value = value
self.reason = reason
def __str__(self):
return "invalid configuration setting [%s]->%s (%s): %s" % (self.section, self.name, self.value, self.reason)
class CBEnvironmentError(CryptoBoxError):
"""some part of the environment of the cryptobox is broken
e.g. the wrong version of a required program
"""
def __init__(self, desc):
self.desc = desc
def __str__(self):
return "misconfiguration detected: %s" % self.desc
class CBContainerError(CryptoBoxError):
"""any error raised while manipulating a cryptobox container"""
def __init__(self, desc):
self.desc = desc
def __str__(self):
return self.desc
class CBCreateError(CBContainerError):
pass
class CBVolumeIsActive(CBContainerError):
pass
class CBInvalidName(CBContainerError):
pass
class CBNameActivelyUsed(CBContainerError):
pass
class CBInvalidType(CBContainerError):
pass
class CBInvalidPassword(CBContainerError):
pass
class CBChangePasswordError(CBContainerError):
pass
class CBMountError(CBContainerError):
pass
class CBUmountError(CBContainerError):
pass

165
bin/CryptoBoxPlugin.py Normal file
View file

@ -0,0 +1,165 @@
# $Id$
#
# parent class for all plugins of the CryptoBox
#
import os
import cherrypy
class CryptoBoxPlugin:
## default capability is "system" - the other supported capability is: "volume"
pluginCapabilities = [ "system" ]
## does this plugin require admin authentification?
requestAuth = False
## is this plugin enabled by default?
enabled = True
## default rank (0..100) of the plugin in listings (lower value means higher priority)
rank = 80
## default icon of this plugin (relative path)
defaultIconFileName = "plugin_icon.png"
def __init__(self, cbox, pluginDir):
self.cbox = cbox
self.hdf = {}
self.pluginDir = pluginDir
self.hdf_prefix = "Data.Plugins.%s." % self.getName()
def doAction(self, **args):
"""override doAction with your plugin code"""
raise Exception, "undefined action handler ('doAction') in plugin '%'" % self.getName()
def getStatus(self):
"""you should override this, to supply useful state information"""
raise Exception, "undefined state handler ('getStatus') in plugin '%'" % self.getName()
def getName(self):
"""the name of the python file (module) should be the name of the plugin"""
return self.__module__
@cherrypy.expose
def getIcon(self, image=None, **kargs):
"""return the image data of the icon of the plugin
the parameter 'image' may be used for alternative image locations (relative
to the directory of the plugin)
'**kargs' is necessary, as a 'weblang' attribute may be specified (and ignored)"""
import cherrypy, re
if (image is None): # or (re.search(u'[\w-\.]', image)):
plugin_icon_file = os.path.join(self.pluginDir, self.defaultIconFileName)
else:
plugin_icon_file = os.path.join(self.pluginDir, image)
if not os.access(plugin_icon_file, os.R_OK):
plugin_icon_file = os.path.join(self.cbox.prefs["Locations"]["PluginDir"], "plugin_icon_unknown.png")
return cherrypy.lib.cptools.serveFile(plugin_icon_file)
def getTemplateFileName(self, template_name):
"""return the filename of the template, if it is part of this plugin
use this function to check, if the plugin provides the specified template
"""
result_file = os.path.join(self.pluginDir, template_name + ".cs")
if os.access(result_file, os.R_OK) and os.path.isfile(result_file):
return result_file
else:
return None
def getLanguageData(self, lang="en"):
try:
import neo_cgi, neo_util
except:
raise CryptoBoxExceptions.CBEnvironmentError("couldn't import 'neo_*'! Try 'apt-get install python-clearsilver'.")
langdir = os.path.abspath(os.path.join(self.pluginDir, "lang"))
## first: the default language file (english)
langFiles = [os.path.join(langdir, "en.hdf")]
## maybe we have to load a translation afterwards
if lang != "en":
langFiles.append(os.path.join(langdir, lang + ".hdf"))
file_found = False
lang_hdf = neo_util.HDF()
for langFile in langFiles:
if os.access(langFile, os.R_OK):
lang_hdf.readFile(langFile)
file_found = True
if file_found:
return lang_hdf
else:
self.cbox.log.debug("Couldn't find a valid plugin language file (%s)" % str(langFiles))
return None
def loadDataSet(self, hdf):
for (key, value) in self.hdf.items():
hdf.setValue(key, str(value))
def isAuthRequired(self):
"""check if this plugin requires authentication
first step: check plugin configuration
second step: check default value of plugin"""
try:
if self.cbox.prefs.pluginConf[self.getName()]["requestAuth"] is None:
return self.requestAuth
if self.cbox.prefs.pluginConf[self.getName()]["requestAuth"]:
return True
else:
return False
except KeyError:
return self.requestAuth
def isEnabled(self):
"""check if this plugin is enabled
first step: check plugin configuration
second step: check default value of plugin"""
import types
try:
if self.cbox.prefs.pluginConf[self.getName()]["enabled"] is None:
return self.enabled
if self.cbox.prefs.pluginConf[self.getName()]["enabled"]:
return True
else:
return False
except KeyError:
return self.enabled
def getRank(self):
"""check the rank of this plugin
first step: check plugin configuration
second step: check default value of plugin"""
try:
if self.cbox.prefs.pluginConf[self.getName()]["rank"] is None:
return self.rank
return int(self.cbox.prefs.pluginConf[self.getName()]["rank"])
except KeyError, TypeError:
return self.rank
def getTestClass(self):
import imp
pl_file = os.path.join(self.pluginDir, "unittests.py")
if os.access(pl_file, os.R_OK) and os.path.isfile(pl_file):
try:
return getattr(imp.load_source("unittests_%s" % self.getName(), pl_file), "unittests")
except AttributeError:
pass
try:
self.cbox.log.info("could not load unittests for plugin: %s" % self.getName())
except AttributeError:
pass
return None

386
bin/CryptoBoxRootActions.py Executable file
View file

@ -0,0 +1,386 @@
#!/usr/bin/env python2.4
"""module for executing the programs, that need root privileges
Syntax:
- program
- device
- [action]
- [action args]
this script will always return with an exitcode 0 (true), if "check" is the only argument
"""
import os
import sys
import subprocess
import pwd
import grp
import types
allowedProgs = {
"sfdisk": "/sbin/sfdisk",
"cryptsetup": "/sbin/cryptsetup",
"mount": "/bin/mount",
"umount": "/bin/umount",
"blkid": "/sbin/blkid",
}
DEV_TYPES = { "pipe":1, "char":2, "dir":4, "block":6, "file":8, "link":10, "socket":12}
def checkIfPluginIsSafe(plugin):
"""check if the plugin and its parents are only writeable for root"""
#FIXME: for now we may skip this test - but users will not like it this way :)
return True
props = os.stat(plugin)
## check if it is owned by non-root
if props.st_uid != 0: return False
## check group-write permission if gid is not zero
if (props.st_gid != 0) and (props.st_mode % 32 / 16 > 0): return False
## check if it is world-writeable
if props.st_mode % 4 / 2 > 0: return False
## are we at root-level (directory-wise)? If yes, then we are ok ...
if plugin == os.path.sep: return True
## check if the parent directory is ok - recursively :)
return checkIfPluginIsSafe(os.path.dirname(os.path.abspath(plugin)))
def checkIfPluginIsValid(plugin):
import imp
try:
x = imp.load_source("cbox_plugin",plugin)
except Exception:
return False
try:
if getattr(x, "PLUGIN_TYPE") == "cryptobox":
return True
else:
return False
except Exception:
return False
def call_plugin(args):
"""check if the plugin may be called - and do it finally ..."""
plugin = os.path.abspath(args[0])
del args[0]
## check existence and excutability
if not os.access(plugin, os.X_OK):
raise Exception, "could not find executable plugin (%s)" % plugin
## check if the plugin (and its parents) are only writeable for root
if not checkIfPluginIsSafe(plugin):
raise Exception, "the plugin (%s) was not safe - check its (and its parents') permissions" % plugin
## check if the plugin is a python program, that is marked as a cryptobox plugin
if not checkIfPluginIsValid(plugin):
raise Exception, "the plugin (%s) is not a correctly marked python script" % plugin
args.insert(0,plugin)
proc = subprocess.Popen(
shell = False,
args = args)
proc.wait()
return proc.returncode == 0
def isWriteable(device, force_dev_type=None):
"""check if the calling user (not root!) has write access to the device/file
the real (not the effictive) user id is used for the check
additionally the permissions of the default groups of the real uid are checked
this check works nicely together with "super", as it changes (by default) only
the effective uid (not the real uid)
"""
# first check, if the device/file exists
if not os.path.exists(device):
return False
# check the type of the device - if necessary
if not force_dev_type is None:
dev_type = os.stat(device).st_mode % 65536 / 4096
if dev_type != force_dev_type: return False
# retrieve the information for the real user id
(trustUserName, trustUID, groupsOfTrustUser) = getUserInfo(os.getuid())
# set the default groups of the caller for the check (restore them later)
savedGroups = os.getgroups()
os.setgroups(groupsOfTrustUser)
# check permissions
result = os.access(device, os.W_OK) and os.access(device, os.R_OK)
# reset the groups of this process
os.setgroups(savedGroups)
return result
def run_cryptsetup(args):
"""execute cryptsetup as root
@args: list of arguments - they will be treated accordingly to the first element
of this list (the action)"""
if not args: raise "WrongArguments", "no action for cryptsetup supplied"
if type(args) != types.ListType: raise "WrongArguments", "invalid arguments supplied: %s" % (args, )
try:
action = args[0]
del args[0]
device = None
cmd_args = []
if action == "luksFormat":
device = args[0]; del args[0]
cmd_args.append(action)
cmd_args.append(device)
elif action == "luksUUID":
device = args[0]; del args[0]
cmd_args.append(action)
cmd_args.append(device)
elif action == "luksOpen":
if len(args) < 2: raise "WrongArguments", "missing arguments"
device = args[0]; del args[0]
destination = args[0]; del args[0]
cmd_args.append(action)
cmd_args.append(device)
cmd_args.append(destination)
elif action == "luksClose":
if len(args) < 1: raise "WrongArguments", "missing arguments"
destination = args[0]; del args[0]
# maybe add a check for the mapped device's permissions?
# dmsetup deps self.device
cmd_args.append(action)
cmd_args.append(destination)
elif action == "luksAddKey":
device = args[0]; del args[0]
cmd_args.append(action)
cmd_args.append(device)
elif action == "luksDelKey":
if len(cs_args) < 2: raise "WrongArguments", "missing arguments"
device = args[0]; del args[0]
cmd_args.insert(-1, action)
cmd_args.insert(-1, device)
elif action == "isLuks":
device = args[0]; del args[0]
cmd_args.append(action)
cmd_args.append(device)
else: raise "WrongArguments", "invalid action supplied: %s" % (action, )
# check if a device was defined - and check it
if (not device is None) and (not isWriteable(device, DEV_TYPES["block"])):
raise "WrongArguments", "%s is not a writeable block device" % (device, )
cs_args = [allowedProgs["cryptsetup"]]
cs_args.extend(args)
cs_args.extend(cmd_args)
except (TypeError, IndexError):
raise "WrongArguments", "invalid arguments supplied: %s" % (args, )
# execute cryptsetup with the given parameters
proc = subprocess.Popen(
shell = False,
args = cs_args)
proc.wait()
## chown the devmapper block device to the cryptobox user
if (proc.returncode == 0) and (action == "luksOpen"):
os.chown(os.path.join(os.path.sep, "dev", "mapper", destination), os.getuid(), os.getgid())
return proc.returncode == 0
def run_sfdisk(args):
"""execute sfdisk for partitioning
not implemented yet"""
print "ok - you are free to call sfdisk ..."
print " not yet implemented ..."
return True
def getFSType(device):
"""get the filesystem type of a device"""
proc = subprocess.Popen(
shell = False,
stdout = subprocess.PIPE,
args = [ allowedProgs["blkid"],
"-s", "TYPE",
"-o", "value",
"-c", os.devnull,
"-w", os.devnull,
device])
(stdout, stderr) = proc.communicate()
if proc.returncode != 0:
return None
return stdout.strip()
def run_mount(args):
"""execute mount
"""
if not args: raise "WrongArguments", "no destination for mount supplied"
if type(args) != types.ListType: raise "WrongArguments", "invalid arguments supplied: %s" % (args, )
try:
device = args[0]
del args[0]
destination = args[0]
del args[0]
# check permissions for the device
if not isWriteable(device, DEV_TYPES["block"]):
raise "WrongArguments", "%s is not a writeable block device" % (device, )
## check permissions for the mountpoint
if not isWriteable(destination, DEV_TYPES["dir"]):
raise "WrongArguments", "the mountpoint (%s) is not writeable" % (destination, )
# check for additional (not allowed) arguments
if len(args) != 0:
raise "WrongArguments", "too many arguments for 'mount': %s" % (args, )
except TypeError:
raise "WrongArguments", "invalid arguments supplied: %s" % (args, )
# execute mount with the given parameters
# first overwrite the real uid, as 'mount' wants this to be zero (root)
savedUID = os.getuid()
os.setuid(os.geteuid())
## we have to change the permissions of the mounted directory - otherwise it will
## not be writeable for the cryptobox user
## for 'vfat' we have to do this during mount
## for ext2/3 we have to do it afterward
## first: get the user/group of the target
(trustUserName, trustUID, groupsOfTrustUser) = getUserInfo(savedUID)
trustGID = groupsOfTrustUser[0]
fsType = getFSType(device)
## define arguments
if fsType == "vfat":
## add the "uid/gid" arguments to the mount call
mount_args = [allowedProgs["mount"],
"-o", "uid=%d,gid=%d" % (trustUID, trustGID),
device,
destination]
else:
## all other filesystem types will be handled after mount
mount_args = [allowedProgs["mount"], device, destination]
# execute mount
proc = subprocess.Popen(
shell = False,
args = mount_args)
proc.wait()
## return in case of an error
if proc.returncode != 0:
return False
## for vfat: we are done
if fsType == "vfat": return True
## for all other filesystem types: chown the mount directory
try:
os.chown(destination, trustUID, groupsOfTrustUser[0])
except OSError, errMsg:
sys.stderr.write("could not chown the mount destination (%s) to the specified user (%d/%d): %s\n" % (destination, trustUID, groupsOfTrustUser[0], errMsg))
sys.stderr.write("UID: %d\n" % (os.geteuid(),))
return False
## BEWARE: it would be nice, if we could restore the previous uid (not euid) but
## this would also override the euid (see 'man 2 setuid') - any ideas?
return True
def run_umount(args):
"""execute mount
"""
if not args: raise "WrongArguments", "no mountpoint for umount supplied"
if type(args) != types.ListType: raise "WrongArguments", "invalid arguments supplied"
try:
destination = args[0]
del args[0]
# check permissions for the destination
if not isWriteable(os.path.dirname(destination), DEV_TYPES["dir"]):
raise "WrongArguments", "the parent of the mountpoint (%s) is not writeable" % (destination, )
if len(args) != 0: raise "WrongArguments", "umount does not allow arguments"
except TypeError:
raise "WrongArguments", "invalid arguments supplied"
# execute umount with the given parameters
# first overwrite the real uid, as 'umount' wants this to be zero (root)
savedUID = os.getuid()
os.setuid(os.geteuid())
# execute umount (with the parameter '-l' - lazy umount)
proc = subprocess.Popen(
shell = False,
args = [allowedProgs["umount"], "-l", destination])
proc.wait()
# restore previous real uid
os.setuid(savedUID)
return proc.returncode == 0
def getUserInfo(user):
"""return information about the specified user
@user: (uid or name)
@return: tuple of (name, uid, (groups))
"""
if user is None: raise "KeyError", "no user supplied"
# first check, if 'user' contains an id - then check for a name
try:
userinfo = pwd.getpwuid(user)
except TypeError:
# if a KeyError is raised again, then the supplied user was invalid
userinfo = pwd.getpwnam(user)
u_groups =[one_group.gr_gid
for one_group in grp.getgrall()
if userinfo.pw_name in one_group.gr_mem]
if not userinfo.pw_gid in u_groups: u_groups.append(userinfo.pw_gid)
return (userinfo.pw_name, userinfo.pw_uid, u_groups)
# **************** main **********************
# prevent import
if __name__ == "__main__":
# do we have root privileges (effective uid is zero)?
if os.geteuid() != 0:
sys.stderr.write("the effective uid is not zero - you should use 'super' to call this script (%s)" % sys.argv[0])
sys.exit(100)
# remove program name
args = sys.argv[1:]
# do not allow to use root permissions (real uid may not be zero)
if os.getuid() == 0:
sys.stderr.write("the uid of the caller is zero (root) - this is not allowed\n")
sys.exit(100)
# check if there were arguments
if (len(args) == 0):
sys.stderr.write("No arguments supplied\n")
sys.exit(100)
# did the user call the "check" action?
if (len(args) == 1) and (args[0].lower() == "check"):
# exit silently
sys.exit(0)
if args[0].lower() == "plugin":
del args[0]
try:
isOK = call_plugin(args)
except Exception, errMsg:
sys.stderr.write("Execution of plugin failed: %s\n" % errMsg)
sys.exit(100)
if isOK:
sys.exit(0)
else:
sys.exit(1)
# check parameters count
if len(args) < 2:
sys.stderr.write("Not enough arguments supplied (%s)!\n" % " ".join(args))
sys.exit(100)
progRequest = args[0]
del args[0]
if not progRequest in allowedProgs.keys():
sys.stderr.write("Invalid program requested: %s\n" % progRequest)
sys.exit(100)
if progRequest == "cryptsetup": runner = run_cryptsetup
elif progRequest == "sfdisk": runner = run_sfdisk
elif progRequest == "mount": runner = run_mount
elif progRequest == "umount": runner = run_umount
else:
sys.stderr.write("The interface for this program (%s) is not yet implemented!\n" % progRequest)
sys.exit(100)
try:
if runner(args):
sys.exit(0)
else:
sys.exit(1)
except "WrongArguments", errstr:
sys.stderr.write("Execution failed: %s\n" % errstr)
sys.exit(100)

481
bin/CryptoBoxSettings.py Normal file
View file

@ -0,0 +1,481 @@
import logging
try:
import validate
except:
raise CryptoBoxExceptions.CBEnvironmentError("couldn't import 'validate'! Try 'apt-get install python-formencode'.")
import os
import CryptoBoxExceptions
import subprocess
try:
import configobj ## needed for reading and writing of the config file
except:
raise CryptoBoxExceptions.CBEnvironmentError("couldn't import 'configobj'! Try 'apt-get install python-configobj'.")
class CryptoBoxSettings:
CONF_LOCATIONS = [
"./cryptobox.conf",
"~/.cryptobox.conf",
"/etc/cryptobox/cryptobox.conf"]
NAMEDB_FILE = "cryptobox_names.db"
PLUGINCONF_FILE = "cryptobox_plugins.conf"
USERDB_FILE = "cryptobox_users.db"
def __init__(self, config_file=None):
self.log = logging.getLogger("CryptoBox")
config_file = self.__getConfigFileName(config_file)
self.log.info("loading config file: %s" % config_file)
self.prefs = self.__getPreferences(config_file)
self.__validateConfig()
self.__configureLogHandler()
self.__checkUnknownPreferences()
self.preparePartition()
self.nameDB = self.__getNameDatabase()
self.pluginConf = self.__getPluginConfig()
self.userDB = self.__getUserDB()
self.misc_files = self.__getMiscFiles()
def write(self):
"""
write all local setting files including the content of the "misc" subdirectory
"""
ok = True
try:
self.nameDB.write()
except IOError:
self.log.warn("could not save the name database")
ok = False
try:
self.pluginConf.write()
except IOError:
self.log.warn("could not save the plugin configuration")
ok = False
try:
self.userDB.write()
except IOError:
self.log.warn("could not save the user database")
ok = False
for misc_file in self.misc_files:
if not misc_file.save():
self.log.warn("could not save a misc setting file (%s)" % misc_file.filename)
ok = False
return ok
def requiresPartition(self):
return bool(self.prefs["Main"]["UseConfigPartition"])
def getActivePartition(self):
settings_dir = self.prefs["Locations"]["SettingsDir"]
if not os.path.ismount(settings_dir): return None
for line in file("/proc/mounts"):
fields = line.split(" ")
mount_dir = fields[1]
try:
if os.path.samefile(mount_dir, settings_dir): return fields[0]
except OSError:
pass
## no matching entry found
return None
def mountPartition(self):
self.log.debug("trying to mount configuration partition")
if not self.requiresPartition():
self.log.warn("mountConfigPartition: configuration partition is not required - mounting anyway")
if self.getActivePartition():
self.log.warn("mountConfigPartition: configuration partition already mounted - not mounting again")
return False
confPartitions = self.getAvailablePartitions()
if not confPartitions:
self.log.error("no configuration partitions found - you have to create it first")
return False
partition = confPartitions[0]
proc = subprocess.Popen(
shell = False,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
args = [
self.prefs["Programs"]["super"],
self.prefs["Programs"]["CryptoBoxRootActions"],
"mount",
partition,
self.prefs["Locations"]["SettingsDir"]])
(stdout, stderr) = proc.communicate()
if proc.returncode != 0:
self.log.error("failed to mount the configuration partition: %s" % partition)
self.log.error("output of mount: %s" % (stderr,))
return False
self.log.info("configuration partition mounted: %s" % partition)
return True
def umountPartition(self):
if not self.getActivePartition():
self.log.warn("umountConfigPartition: no configuration partition mounted")
return False
proc = subprocess.Popen(
shell = False,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
args = [
self.prefs["Programs"]["super"],
self.prefs["Programs"]["CryptoBoxRootActions"],
"umount",
self.prefs["Locations"]["SettingsDir"]])
(stdout, stderr) = proc.communicate()
if proc.returncode != 0:
self.log.error("failed to unmount the configuration partition")
self.log.error("output of mount: %s" % (stderr,))
return False
self.log.info("configuration partition unmounted")
return True
def getAvailablePartitions(self):
"""returns a sequence of found config partitions"""
proc = subprocess.Popen(
shell = False,
stdout = subprocess.PIPE,
args = [
self.prefs["Programs"]["blkid"],
"-c", os.path.devnull,
"-t", "LABEL=%s" % self.prefs["Main"]["ConfigVolumeLabel"] ])
(output, error) = proc.communicate()
if output:
return [e.strip().split(":",1)[0] for e in output.splitlines()]
else:
return []
def preparePartition(self):
if self.requiresPartition() and not self.getActivePartition():
self.mountPartition()
def __getitem__(self, key):
"""redirect all requests to the 'prefs' attribute"""
return self.prefs[key]
def __getPreferences(self, config_file):
import StringIO
config_rules = StringIO.StringIO(self.validation_spec)
try:
prefs = configobj.ConfigObj(config_file, configspec=config_rules)
if prefs:
self.log.info("found config: %s" % prefs.items())
else:
raise CryptoBoxExceptions.CBConfigUnavailableError("failed to load the config file: %s" % config_file)
except IOError:
raise CryptoBoxExceptions.CBConfigUnavailableError("unable to open the config file: %s" % config_file)
return prefs
def __validateConfig(self):
result = self.prefs.validate(CryptoBoxSettingsValidator(), preserve_errors=True)
error_list = configobj.flatten_errors(self.prefs, result)
if not error_list: return
errorMsgs = []
for sections, key, text in error_list:
section_name = "->".join(sections)
if not text:
errorMsg = "undefined configuration value (%s) in section '%s'" % (key, section_name)
else:
errorMsg = "invalid configuration value (%s) in section '%s': %s" % (key, section_name, text)
errorMsgs.append(errorMsg)
raise CryptoBoxExceptions.CBConfigError, "\n".join(errorMsgs)
def __checkUnknownPreferences(self):
import StringIO
config_rules = configobj.ConfigObj(StringIO.StringIO(self.validation_spec), list_values=False)
self.__recursiveConfigSectionCheck("", self.prefs, config_rules)
def __recursiveConfigSectionCheck(self, section_path, section_config, section_rules):
"""should be called by '__checkUnknownPreferences' for every section
sends a warning message to the logger for every undefined (see validation_spec)
configuration setting
"""
for e in section_config.keys():
element_path = section_path + e
if e in section_rules.keys():
if isinstance(section_config[e], configobj.Section):
if isinstance(section_rules[e], configobj.Section):
self.__recursiveConfigSectionCheck(element_path + "->", section_config[e], section_rules[e])
else:
self.log.warn("configuration setting should be a value instead of a section name: %s" % element_path)
else:
if not isinstance(section_rules[e], configobj.Section):
pass # good - the setting is valid
else:
self.log.warn("configuration setting should be a section name instead of a value: %s" % element_path)
else:
self.log.warn("unknown configuration setting: %s" % element_path)
def __getNameDatabase(self):
try:
try:
nameDB_file = os.path.join(self.prefs["Locations"]["SettingsDir"], self.NAMEDB_FILE)
except KeyError:
raise CryptoBoxExceptions.CBConfigUndefinedError("Locations", "SettingsDir")
except SyntaxError:
raise CryptoBoxExceptions.CBConfigInvalidValueError("Locations", "SettingsDir", nameDB_file, "failed to interprete the filename of the name database correctly (%s)" % nameDB_file)
## create nameDB if necessary
if os.path.exists(nameDB_file):
nameDB = configobj.ConfigObj(nameDB_file)
else:
nameDB = configobj.ConfigObj(nameDB_file, create_empty=True)
## check if nameDB file was created successfully?
if not os.path.exists(nameDB_file):
raise CryptoBoxExceptions.CBEnvironmentError("failed to create name database (%s)" % nameDB_file)
return nameDB
def __getPluginConfig(self):
import StringIO
plugin_rules = StringIO.StringIO(self.pluginValidationSpec)
try:
try:
pluginConf_file = os.path.join(self.prefs["Locations"]["SettingsDir"], self.PLUGINCONF_FILE)
except KeyError:
raise CryptoBoxExceptions.CBConfigUndefinedError("Locations", "SettingsDir")
except SyntaxError:
raise CryptoBoxExceptions.CBConfigInvalidValueError("Locations", "SettingsDir", pluginConf_file, "failed to interprete the filename of the plugin config file correctly (%s)" % pluginConf_file)
## create pluginConf_file if necessary
if os.path.exists(pluginConf_file):
pluginConf = configobj.ConfigObj(pluginConf_file, configspec=plugin_rules)
else:
pluginConf = configobj.ConfigObj(pluginConf_file, configspec=plugin_rules, create_empty=True)
## validate and convert values according to the spec
pluginConf.validate(validate.Validator())
## check if pluginConf_file file was created successfully?
if not os.path.exists(pluginConf_file):
raise CryptoBoxExceptions.CBEnvironmentError("failed to create plugin configuration file (%s)" % pluginConf_file)
return pluginConf
def __getUserDB(self):
import StringIO, sha
userDB_rules = StringIO.StringIO(self.userDatabaseSpec)
try:
try:
userDB_file = os.path.join(self.prefs["Locations"]["SettingsDir"], self.USERDB_FILE)
except KeyError:
raise CryptoBoxExceptions.CBConfigUndefinedError("Locations", "SettingsDir")
except SyntaxError:
raise CryptoBoxExceptions.CBConfigInvalidValueError("Locations", "SettingsDir", userDB_file, "failed to interprete the filename of the users database file correctly (%s)" % userDB_file)
## create userDB_file if necessary
if os.path.exists(userDB_file):
userDB = configobj.ConfigObj(userDB_file, configspec=userDB_rules)
else:
userDB = configobj.ConfigObj(userDB_file, configspec=userDB_rules, create_empty=True)
## validate and set default value for "admin" user
userDB.validate(validate.Validator())
## check if userDB file was created successfully?
if not os.path.exists(userDB_file):
raise CryptoBoxExceptions.CBEnvironmentError("failed to create user database file (%s)" % userDB_file)
## define password hash function - never use "sha" directly - SPOT
userDB.getDigest = lambda password: sha.new(password).hexdigest()
return userDB
def __getMiscFiles(self):
misc_dir = os.path.join(self.prefs["Locations"]["SettingsDir"], "misc")
if (not os.path.isdir(misc_dir)) or (not os.access(misc_dir, os.X_OK)):
return []
return [MiscConfigFile(os.path.join(misc_dir, f), self.log)
for f in os.listdir(misc_dir)
if os.path.isfile(os.path.join(misc_dir, f))]
def __getConfigFileName(self, config_file):
# search for the configuration file
import types
if config_file is None:
# no config file was specified - we will look for it in the ususal locations
conf_file_list = [os.path.expanduser(f)
for f in self.CONF_LOCATIONS
if os.path.exists(os.path.expanduser(f))]
if not conf_file_list:
# no possible config file found in the usual locations
raise CryptoBoxExceptions.CBConfigUnavailableError()
config_file = conf_file_list[0]
else:
# a config file was specified (e.g. via command line)
if type(config_file) != types.StringType:
raise CryptoBoxExceptions.CBConfigUnavailableError("invalid config file specified: %s" % config_file)
if not os.path.exists(config_file):
raise CryptoBoxExceptions.CBConfigUnavailableError("could not find the specified configuration file (%s)" % config_file)
return config_file
def __configureLogHandler(self):
try:
log_level = self.prefs["Log"]["Level"].upper()
log_level_avail = ["DEBUG", "INFO", "WARN", "ERROR"]
if not log_level in log_level_avail:
raise TypeError
except KeyError:
raise CryptoBoxExceptions.CBConfigUndefinedError("Log", "Level")
except TypeError:
raise CryptoBoxExceptions.CBConfigInvalidValueError("Log", "Level", log_level, "invalid log level: only %s are allowed" % log_level_avail)
try:
try:
log_handler = logging.FileHandler(self.prefs["Log"]["Details"])
except KeyError:
raise CryptoBoxExceptions.CBConfigUndefinedError("Log", "Details")
except IOError:
raise CryptoBoxExceptions.CBEnvironmentError("could not create the log file (%s)" % self.prefs["Log"]["Details"])
log_handler.setFormatter(logging.Formatter('%(asctime)s CryptoBox %(levelname)s: %(message)s'))
cbox_log = logging.getLogger("CryptoBox")
## remove previous handlers
cbox_log.handlers = []
## add new one
cbox_log.addHandler(log_handler)
## do not call parent's handlers
cbox_log.propagate = False
## 'log_level' is a string -> use 'getattr'
cbox_log.setLevel(getattr(logging,log_level))
## the logger named "CryptoBox" is configured now
validation_spec = """
[Main]
AllowedDevices = list(min=1)
DefaultVolumePrefix = string(min=1)
DefaultCipher = string(default="aes-cbc-essiv:sha256")
ConfigVolumeLabel = string(min=1, default="cbox_config")
UseConfigPartition = integer(min=0, max=1, default=0)
[Locations]
MountParentDir = directoryExists(default="/var/cache/cryptobox/mnt")
SettingsDir = directoryExists(default="/var/cache/cryptobox/settings")
TemplateDir = directoryExists(default="/usr/share/cryptobox/template")
LangDir = directoryExists(default="/usr/share/cryptobox/lang")
DocDir = directoryExists(default="/usr/share/doc/cryptobox/html")
PluginDir = directoryExists(default="/usr/share/cryptobox/plugins")
[Log]
Level = option("debug", "info", "warn", "error", default="warn")
Destination = option("file", default="file")
Details = string(min=1)
[WebSettings]
Stylesheet = string(min=1)
Language = string(min=1, default="en")
[Programs]
cryptsetup = fileExecutable(default="/sbin/cryptsetup")
mkfs-data = fileExecutable(default="/sbin/mkfs.ext3")
blkid = fileExecutable(default="/sbin/blkid")
blockdev = fileExecutable(default="/sbin/blockdev")
mount = fileExecutable(default="/bin/mount")
umount = fileExecutable(default="/bin/umount")
super = fileExecutable(default="/usr/bin/super")
# this is the "program" name as defined in /etc/super.tab
CryptoBoxRootActions = string(min=1)
"""
pluginValidationSpec = """
[__many__]
enabled = boolean(default=None)
requestAuth = boolean(default=None)
rank = integer(default=None)
"""
userDatabaseSpec = """
[admins]
admin = string(default=d033e22ae348aeb5660fc2140aec35850c4da997)
"""
class CryptoBoxSettingsValidator(validate.Validator):
def __init__(self):
validate.Validator.__init__(self)
self.functions["directoryExists"] = self.check_directoryExists
self.functions["fileExecutable"] = self.check_fileExecutable
self.functions["fileWriteable"] = self.check_fileWriteable
def check_directoryExists(self, value):
dir_path = os.path.abspath(value)
if not os.path.isdir(dir_path):
raise validate.VdtValueError("%s (not found)" % value)
if not os.access(dir_path, os.X_OK):
raise validate.VdtValueError("%s (access denied)" % value)
return dir_path
def check_fileExecutable(self, value):
file_path = os.path.abspath(value)
if not os.path.isfile(file_path):
raise validate.VdtValueError("%s (not found)" % value)
if not os.access(file_path, os.X_OK):
raise validate.VdtValueError("%s (access denied)" % value)
return file_path
def check_fileWriteable(self, value):
file_path = os.path.abspath(value)
if os.path.isfile(file_path):
if not os.access(file_path, os.W_OK):
raise validate.VdtValueError("%s (not found)" % value)
else:
parent_dir = os.path.dirname(file_path)
if os.path.isdir(parent_dir) and os.access(parent_dir, os.W_OK):
return file_path
raise validate.VdtValueError("%s (directory does not exist)" % value)
return file_path
class MiscConfigFile:
maxSize = 20480
def __init__(self, filename, logger):
self.filename = filename
self.log = logger
self.load()
def load(self):
fd = open(self.filename, "rb")
## limit the maximum size
self.content = fd.read(self.maxSize)
if fd.tell() == self.maxSize:
self.log.warn("file in misc settings directory (%s) is bigger than allowed (%s)" % (self.filename, self.maxSize))
fd.close()
def save(self):
save_dir = os.path.dirname(self.filename)
## create the directory, if necessary
if not os.path.isdir(save_dir):
try:
os.mkdir(save_dir)
except IOError:
return False
## save the content of the file
try:
fd = open(self.filename, "wb")
except IOError:
return False
try:
fd.write(self.content)
fd.close()
return True
except IOError:
fd.close()
return False

186
bin/CryptoBoxTools.py Normal file
View file

@ -0,0 +1,186 @@
import logging
import os
import re
logger = logging.getLogger("CryptoBox")
def getAvailablePartitions():
"retrieve a list of all available containers"
ret_list = []
try:
"the following reads all lines of /proc/partitions and adds the mentioned devices"
fpart = open("/proc/partitions", "r")
try:
line = fpart.readline()
while line:
p_details = line.split()
if (len(p_details) == 4):
"the following code prevents double entries like /dev/hda and /dev/hda1"
(p_major, p_minor, p_size, p_device) = p_details
## ignore lines with: invalid minor/major or extend partitions (size=1)
if re.search('^[0-9]*$', p_major) and re.search('^[0-9]*$', p_minor) and (p_size != "1"):
p_parent = re.sub('[1-9]?[0-9]$', '', p_device)
if p_parent == p_device:
if [e for e in ret_list if re.search('^' + p_parent + '[1-9]?[0-9]$', e)]:
"major partition - its children are already in the list"
pass
else:
"major partition - but there are no children for now"
ret_list.append(p_device)
else:
"minor partition - remove parent if necessary"
if p_parent in ret_list: ret_list.remove(p_parent)
ret_list.append(p_device)
line = fpart.readline()
finally:
fpart.close()
return map(getAbsoluteDeviceName, ret_list)
except IOError:
logger.warning("Could not read /proc/partitions")
return []
def getAbsoluteDeviceName(shortname):
""" returns the absolute file name of a device (e.g.: "hda1" -> "/dev/hda1")
this does also work for device mapper devices
if the result is non-unique, one arbitrary value is returned"""
if re.search('^/', shortname): return shortname
default = os.path.join("/dev", shortname)
if os.path.exists(default): return default
result = findMajorMinorOfDevice(shortname)
"if no valid major/minor was found -> exit"
if not result: return default
(major, minor) = result
"for device-mapper devices (major == 254) ..."
if major == 254:
result = findMajorMinorDeviceName("/dev/mapper", major, minor)
if result: return result[0]
"now check all files in /dev"
result = findMajorMinorDeviceName("/dev", major, minor)
if result: return result[0]
return default
def findMajorMinorOfDevice(device):
"return the major/minor numbers of a block device"
if re.match("/", device) or not os.path.exists(os.path.join(os.path.sep,"sys","block",device)):
## maybe it is an absolute device name
if not os.path.exists(device): return None
## okay - it seems to to a device node
rdev = os.stat(device).st_rdev
return (os.major(rdev), os.minor(rdev))
blockdev_info_file = os.path.join(os.path.join(os.path.sep,"sys","block", device), "dev")
try:
f_blockdev_info = open(blockdev_info_file, "r")
blockdev_info = f_blockdev_info.read()
f_blockdev_info.close()
(str_major, str_minor) = blockdev_info.split(":")
"numeric conversion"
try:
major = int(str_major)
minor = int(str_minor)
return (major, minor)
except ValueError:
"unknown device numbers -> stop guessing"
return None
except IOError:
pass
return None
def findMajorMinorDeviceName(dir, major, minor):
"returns the names of devices with the specified major and minor number"
collected = []
try:
subdirs = [os.path.join(dir, e) for e in os.listdir(dir) if (not os.path.islink(os.path.join(dir, e))) and os.path.isdir(os.path.join(dir, e))]
"do a recursive call to parse the directory tree"
for dirs in subdirs:
collected.extend(findMajorMinorDeviceName(dirs, major, minor))
"filter all device inodes in this directory"
collected.extend([os.path.realpath(os.path.join(dir, e)) for e in os.listdir(dir) if (os.major(os.stat(os.path.join(dir, e)).st_rdev) == major) and (os.minor(os.stat(os.path.join(dir, e)).st_rdev) == minor)])
## remove double entries
result = []
for e in collected:
if e not in result: result.append(e)
return result
except OSError:
return []
def getParentBlockDevices():
devs = []
for line in file("/proc/partitions"):
p_details = line.split()
## we expect four values - otherwise continue with next iteration
if len(p_details) != 4: continue
(p_major, p_minor, p_size, p_device) = p_details
## we expect numeric values in the first two columns
if re.search(u'\D',p_major) or re.search(u'\D',p_minor): continue
## now let us check, if it is a (parent) block device or a partition
if not os.path.isdir(os.path.join(os.path.sep, "sys", "block", p_device)): continue
devs.append(p_device)
return map(getAbsoluteDeviceName, devs)
def isPartOfBlockDevice(parent, subdevice):
"""check if the given block device is a parent of 'subdevice'
e.g. for checking if a partition belongs to a block device"""
try:
(par_major, par_minor) = findMajorMinorOfDevice(parent)
(sub_major, sub_minor) = findMajorMinorOfDevice(subdevice)
except TypeError:
## at least one of these devices did not return a valid major/minor combination
return False
## search the entry below '/sys/block' belonging to the parent
root = os.path.join(os.path.sep, 'sys', 'block')
for bldev in os.listdir(root):
blpath = os.path.join(root, bldev, 'dev')
if os.access(blpath, os.R_OK):
try:
if (str(par_major), str(par_minor)) == tuple([e for e in file(blpath)][0].strip().split(":",1)):
parent_path = os.path.join(root, bldev)
break
except IndexError, OSError:
pass
else:
## no block device with this major/minor combination found below '/sys/block'
return False
for subbldev in os.listdir(parent_path):
subblpath = os.path.join(parent_path, subbldev, "dev")
if os.access(subblpath, os.R_OK):
try:
if (str(sub_major), str(sub_minor)) == tuple([e for e in file(subblpath)][0].strip().split(":",1)):
## the name of the subdevice node is not important - we found it!
return True
except IndexError, OSError:
pass
return False
def getBlockDeviceSize(device):
if not device: return -1
try:
rdev = os.stat(device).st_rdev
except OSError:
return -1
minor = os.minor(rdev)
major = os.major(rdev)
for f in file("/proc/partitions"):
try:
elements = f.split()
if len(elements) != 4: continue
if (int(elements[0]) == major) and (int(elements[1]) == minor):
return int(elements[2])/1024
except ValueError:
pass
return -1
def getBlockDeviceSizeHumanly(device):
size = getBlockDeviceSize(device)
if size > 5120:
return "%sGB" % size/1024
else:
return "%sMB" % size

38
bin/CryptoBoxWebserver.py Executable file
View file

@ -0,0 +1,38 @@
#!/usr/bin/env python2.4
import os
import WebInterfaceSites
import sys
try:
import cherrypy
except:
print "Could not import the cherrypy module! Try 'apt-get install python-cherrypy'."
sys.exit(1)
class CryptoBoxWebserver:
'''this class starts the cherryp webserver and serves the single sites'''
def __init__(self):
cherrypy.root = WebInterfaceSites.WebInterfaceSites()
#expose static content:
#I currently have no idea how to cleanly extract the stylesheet path from
#the config object without an extra CryptoBox.CryptoBoxProps instance.
#perhaps put config handling into a seperate class in CryptoBox.py?
#
# the following manual mapping is necessary, as we may not use relative
# paths in the config file
cherrypy.config.configMap.update({
"/cryptobox-misc": {
"staticFilter.on" : True,
"staticFilter.dir": os.path.abspath("../www-data" )}
})
def start(self):
# just use this config, when we're started directly
cherrypy.config.update(file = "cryptoboxwebserver.conf")
cherrypy.server.start()
if __name__ == "__main__":
cbw = CryptoBoxWebserver()
cbw.start()

67
bin/Plugins.py Normal file
View file

@ -0,0 +1,67 @@
# $Id$
import imp
import os
import logging
class PluginManager:
"""manage available plugins"""
def __init__(self, cbox, plugin_dirs="."):
self.cbox = cbox
self.log = logging.getLogger("CryptoBox")
if hasattr(plugin_dirs, "__iter__"):
self.plugin_dirs = [os.path.abspath(dir) for dir in plugin_dirs]
else:
self.plugin_dirs = [os.path.abspath(plugin_dirs)]
self.pluginList = self.__getAllPlugins()
def getPlugins(self):
return self.pluginList[:]
def getPlugin(self, name):
for p in self.pluginList[:]:
if p.getName() == name:
return p
return None
def __getAllPlugins(self):
list = []
for plfile in self.__getPluginFiles():
list.append(self.__getPluginClass(os.path.basename(plfile)[:-3]))
return list
def __getPluginClass(self, name):
for plfile in self.__getPluginFiles():
if name == os.path.basename(plfile)[:-3]:
try:
pl_class = getattr(imp.load_source(name, plfile), name)
except AttributeError:
return None
return pl_class(self.cbox, os.path.dirname(plfile))
else:
return None
def __getPluginFiles(self):
result = []
for dir in [os.path.abspath(e) for e in self.plugin_dirs if os.access(e, os.R_OK) and os.path.isdir(e)]:
for plname in [f for f in os.listdir(dir)]:
pldir = os.path.join(dir, plname)
plfile = os.path.join(pldir, plname + ".py")
if os.path.isfile(plfile) and os.access(plfile, os.R_OK):
result.append(plfile)
return result
if __name__ == "__main__":
x = PluginManager(None, "../plugins")
for a in x.getPlugins():
if not a is None:
print "Plugin: %s" % a.getName()

136
bin/WebInterfaceDataset.py Normal file
View file

@ -0,0 +1,136 @@
import os
import CryptoBoxContainer
import CryptoBoxTools
## useful constant for some functions
CONT_TYPES = CryptoBoxContainer.CryptoBoxContainer.Types
class WebInterfaceDataset(dict):
"""this class contains all data that should be available for the clearsilver
templates
"""
def __init__(self, cbox, prefs, plugins):
self.prefs = prefs
self.cbox = cbox
self.__setConfigValues()
self.plugins = plugins
self.setCryptoBoxState()
self.setPluginData()
self.setContainersState()
def setCryptoBoxState(self):
import cherrypy
self["Data.Version"] = self.cbox.VERSION
langs = self.cbox.getAvailableLanguages()
langs.sort()
for (index, lang) in enumerate(langs):
self.cbox.log.info("language loaded: %s" % lang)
self["Data.Languages.%d.name" % index] = lang
self["Data.Languages.%d.link" % index] = self.__getLanguageName(lang)
try:
self["Data.ScriptURL.Prot"] = cherrypy.request.scheme
host = cherrypy.request.headers["Host"]
self["Data.ScriptURL.Host"] = host.split(":",1)[0]
complete_url = "%s://%s" % (self["Data.ScriptURL.Prot"], self["Data.ScriptURL.Host"])
try:
port = int(host.split(":",1)[1])
complete_url += ":%s" % port
except (IndexError, ValueError):
if cherrypy.request.scheme == "http":
port = 80
elif cherrypy.request.scheme == "https":
port = 443
else:
## unknown scheme -> port 0
self.cbox.log.info("unknown protocol scheme used: %s" % (cherrypy.request.scheme,))
port = 0
self["Data.ScriptURL.Port"] = port
## retrieve the relative address of the CGI (or the cherrypy base address)
## remove the last part of the url and add a slash
path = "/".join(cherrypy.request.path.split("/")[:-1]) + "/"
self["Data.ScriptURL.Path"] = path
complete_url += path
self["Data.ScriptURL"] = complete_url
except AttributeError:
self["Data.ScriptURL"] = ""
def setCurrentDiskState(self, device):
for container in self.cbox.getContainerList():
if container.getDevice() == device:
isEncrypted = (container.getType() == CONT_TYPES["luks"]) and 1 or 0
isPlain = (container.getType() == CONT_TYPES["plain"]) and 1 or 0
isMounted = container.isMounted() and 1 or 0
self["Data.CurrentDisk.device"] = container.getDevice()
self["Data.CurrentDisk.name"] = container.getName()
self["Data.CurrentDisk.encryption"] = isEncrypted
self["Data.CurrentDisk.plaintext"] = isPlain
self["Data.CurrentDisk.active"] = isMounted
self["Data.CurrentDisk.size"] = CryptoBoxTools.getBlockDeviceSizeHumanly(container.getDevice())
if isMounted:
(size, avail, used) = container.getCapacity()
percent = used / size
self["Data.CurrentDisk.capacity.used"] = used
self["Data.CurrentDisk.capacity.free"] = avail
self["Data.CurrentDisk.capacity.size"] = size
self["Data.CurrentDisk.capacity.percent"] = percent
self["Settings.LinkAttrs.device"] = device
def setContainersState(self):
avail_counter = 0
active_counter = 0
for container in self.cbox.getContainerList():
## useful if the container was changed during an action
container.resetObject()
isEncrypted = (container.getType() == CONT_TYPES["luks"]) and 1 or 0
isPlain = (container.getType() == CONT_TYPES["plain"]) and 1 or 0
isMounted = container.isMounted() and 1 or 0
self["Data.Disks.%d.device" % avail_counter] = container.getDevice()
self["Data.Disks.%d.name" % avail_counter] = container.getName()
self["Data.Disks.%d.encryption" % avail_counter] = isEncrypted
self["Data.Disks.%d.plaintext" % avail_counter] = isPlain
self["Data.Disks.%d.active" % avail_counter] = isMounted
self["Data.Disks.%d.size" % avail_counter] = CryptoBoxTools.getBlockDeviceSizeHumanly(container.getDevice())
if isMounted: active_counter += 1
avail_counter += 1
self["Data.activeDisksCount"] = active_counter
def setPluginData(self):
for p in self.plugins:
lang_data = p.getLanguageData()
entryName = "Settings.PluginList." + p.getName()
self[entryName] = p.getName()
self[entryName + ".Link"] = lang_data.getValue("Link", p.getName())
self[entryName + ".Rank"] = p.getRank()
self[entryName + ".RequestAuth"] = p.isAuthRequired() and "1" or "0"
self[entryName + ".Enabled"] = p.isEnabled() and "1" or "0"
for a in p.pluginCapabilities:
self[entryName + ".Types." + a] = "1"
def __setConfigValues(self):
self["Settings.TemplateDir"] = os.path.abspath(self.prefs["Locations"]["TemplateDir"])
self["Settings.LanguageDir"] = os.path.abspath(self.prefs["Locations"]["LangDir"])
self["Settings.DocDir"] = os.path.abspath(self.prefs["Locations"]["DocDir"])
self["Settings.Stylesheet"] = self.prefs["WebSettings"]["Stylesheet"]
self["Settings.Language"] = self.prefs["WebSettings"]["Language"]
self["Settings.PluginDir"] = self.prefs["Locations"]["PluginDir"]
self["Settings.SettingsDir"] = self.prefs["Locations"]["SettingsDir"]
def __getLanguageName(self, lang):
try:
import neo_cgi, neo_util, neo_cs
except:
raise CryptoBoxExceptions.CBEnvironmentError("couldn't import 'neo_*'! Try 'apt-get install python-clearsilver'.")
hdf_path = os.path.join(self.prefs["Locations"]["LangDir"], lang + ".hdf")
hdf = neo_util.HDF()
hdf.readFile(hdf_path)
return hdf.getValue("Name",lang)

427
bin/WebInterfaceSites.py Executable file
View file

@ -0,0 +1,427 @@
import CryptoBox
import WebInterfaceDataset
import re
import Plugins
from CryptoBoxExceptions import *
import cherrypy
import types
import os
try:
import neo_cgi, neo_util, neo_cs
except ImportError:
errorMsg = "Could not import clearsilver module. Try 'apt-get install python-clearsilver'."
self.log.error(errorMsg)
sys.stderr.write(errorMsg)
raise ImportError, errorMsg
class PluginIconHandler:
def __init__(self, plugins):
for plugin in plugins.getPlugins():
if not plugin: continue
plname = plugin.getName()
## expose the getIcon function of this plugin
setattr(self, plname, plugin.getIcon)
class WebInterfaceSites:
'''
'''
## this template is used under strange circumstances
defaultTemplate = "empty"
def __init__(self):
import logging
self.cbox = CryptoBox.CryptoBoxProps()
self.log = logging.getLogger("CryptoBox")
self.prefs = self.cbox.prefs
self.__resetDataset()
def __resetDataset(self):
"""this method has to be called at the beginning of every "site" action
important: only at the beginning of an action (to not loose information)
important: for _every_ "site" action (cherrypy is stateful)
also take care for the plugins, as they also contain datasets
"""
self.__loadPlugins()
self.dataset = WebInterfaceDataset.WebInterfaceDataset(self.cbox, self.prefs, self.pluginList.getPlugins())
## publish plugin icons
self.icons = PluginIconHandler(self.pluginList)
self.icons.exposed = True
## check, if a configuration partition has become available
self.cbox.prefs.preparePartition()
def __loadPlugins(self):
self.pluginList = Plugins.PluginManager(self.cbox, self.prefs["Locations"]["PluginDir"])
for plugin in self.pluginList.getPlugins():
if not plugin: continue
plname = plugin.getName()
if plugin.isEnabled():
self.cbox.log.info("Plugin '%s' loaded" % plname)
## this should be the "easiest" way to expose all plugins as URLs
setattr(self, plname, self.return_plugin_action(plugin))
setattr(getattr(self, plname), "exposed", True)
# TODO: check, if this really works - for now the "stream_response" feature seems to be broken
#setattr(getattr(self, plname), "stream_respones", True)
else:
self.cbox.log.info("Plugin '%s' is disabled" % plname)
## remove the plugin, if it was active before
setattr(self, plname, None)
## this is a function decorator to check authentication
## it has to be defined before any page definition requiring authentification
def __requestAuth(self=None):
def check_credentials(site):
def _inner_wrapper(self, *args, **kargs):
import base64
## define a "non-allowed" function
user, password = None, None
try:
resp = cherrypy.request.headers["Authorization"][6:] # ignore "Basic "
(user, password) = base64.b64decode(resp).split(":",1)
except KeyError:
## no "authorization" header was sent
pass
except TypeError:
## invalid base64 string
pass
except AttributeError:
## no cherrypy response header defined
pass
authDict = self.cbox.prefs.userDB["admins"]
if user in authDict.keys():
if self.cbox.prefs.userDB.getDigest(password) == authDict[user]:
## ok: return the choosen page
self.cbox.log.info("access granted for: %s" % user)
return site(self, *args, **kargs)
else:
self.cbox.log.info("wrong password supplied for: %s" % user)
else:
self.cbox.log.info("unknown user: %s" % str(user))
## wrong credentials: return "access denied"
cherrypy.response.headers["WWW-Authenticate"] = '''Basic realm="CryptoBox"'''
cherrypy.response.status = 401
return self.__render("access_denied")
return _inner_wrapper
return check_credentials
######################################################################
## put real sites down here and don't forget to expose them at the end
@cherrypy.expose
def index(self, weblang=""):
self.__resetDataset()
self.__setWebLang(weblang)
self.__checkEnvironment()
## do not forget the language!
param_dict = {"weblang":weblang}
## render "disks" plugin by default
return self.return_plugin_action(self.pluginList.getPlugin("disks"))(**param_dict)
def return_plugin_action(self, plugin):
def handler(self, **args):
self.__resetDataset()
self.__checkEnvironment()
args_orig = dict(args)
## set web interface language
try:
self.__setWebLang(args["weblang"])
del args["weblang"]
except KeyError:
self.__setWebLang("")
## we always read the "device" setting - otherwise volume-plugin links
## would not work easily (see "volume_props" linking to "format_fs")
## it will get ignored for non-volume plugins
try:
plugin.device = None
if self.__setDevice(args["device"]):
plugin.device = args["device"]
del args["device"]
except KeyError:
pass
## check the device argument of volume plugins
if "volume" in plugin.pluginCapabilities:
## initialize the dataset of the selected device if necessary
if plugin.device:
self.dataset.setCurrentDiskState(plugin.device)
else:
## invalid (or missing) device setting
return self.__render(self.defaultTemplate)
## check if there is a "redirect" setting - this will override the return
## value of the doAction function (e.g. useful for umount-before-format)
try:
if args["redirect"]:
override_nextTemplate = { "plugin":args["redirect"] }
if "volume" in plugin.pluginCapabilities:
override_nextTemplate["values"] = {"device":plugin.device}
del args["redirect"]
except KeyError:
override_nextTemplate = None
## call the plugin handler
nextTemplate = plugin.doAction(**args)
## for 'volume' plugins: reread the dataset of the current disk
## additionally: set the default template for plugins
if "volume" in plugin.pluginCapabilities:
## maybe the state of the current volume was changed?
self.dataset.setCurrentDiskState(plugin.device)
if not nextTemplate: nextTemplate = { "plugin":"volume_mount", "values":{"device":plugin.device}}
else:
## maybe a non-volume plugin changed some plugin settings (e.g. plugin_manager)
self.dataset.setPluginData()
## update the container hdf-dataset (maybe a plugin changed the state of a container)
self.dataset.setContainersState()
## default page for non-volume plugins is the disk selection
if not nextTemplate: nextTemplate = { "plugin":"disks", "values":{} }
## was a redirect requested?
if override_nextTemplate:
nextTemplate = override_nextTemplate
## if another plugins was choosen for 'nextTemplate', then do it!
if isinstance(nextTemplate, types.DictType) \
and "plugin" in nextTemplate.keys() \
and "values" in nextTemplate.keys() \
and self.pluginList.getPlugin(nextTemplate["plugin"]):
valueDict = dict(nextTemplate["values"])
## force the current weblang attribute - otherwise it gets lost
valueDict["weblang"] = self.dataset["Settings.Language"]
new_plugin = self.pluginList.getPlugin(nextTemplate["plugin"])
return self.return_plugin_action(new_plugin)(**valueDict)
## save the currently active plugin name
self.dataset["Data.ActivePlugin"] = plugin.getName()
return self.__render(nextTemplate, plugin)
## apply authentication?
if plugin.isAuthRequired():
return lambda **args: self.__requestAuth()(handler)(self, **args)
else:
return lambda **args: handler(self, **args)
## test authentication
@cherrypy.expose
@__requestAuth
def test(self, weblang=""):
self.__resetDataset()
self.__setWebLang(weblang)
self.__checkEnvironment()
return "test passed"
@cherrypy.expose
def test_stream(self):
"""just for testing purposes - to check if the "stream_response" feature
actually works - for now (September 02006) it does not seem to be ok"""
import time
yield "<html><head><title>neu</title></head><body><p><ul>"
for a in range(10):
yield "<li>yes: %d - %s</li>" % (a, str(time.time()))
time.sleep(1)
yield "</ul></p></html>"
##################### input checker ##########################
def __checkEnvironment(self):
"""here we should place all interesting checks to inform the user of problems
examples are: non-https, readonly-config, ...
"""
## TODO: maybe add an option "mount"?
if self.cbox.prefs.requiresPartition() and not self.cbox.prefs.getActivePartition():
self.dataset["Data.EnvironmentWarning"] = "ReadOnlyConfig"
# TODO: turn this on soon (add "not") - for now it is annoying
if self.__checkHTTPS():
self.dataset["Data.EnvironmentWarning"] = "NoSSL"
def __checkHTTPS(self):
## check the request scheme
if cherrypy.request.scheme == "https": return True
## check an environment setting - this is quite common behind proxies
try:
if os.environ["HTTPS"]: return True
except KeyError:
pass
## check http header TODO (check pound for the name)
try:
if cherrypy.request.headers["TODO"]: return True
except KeyError:
pass
## the connection seems to be unencrypted
return False
def __setWebLang(self, value):
guess = value
availLangs = self.cbox.getAvailableLanguages()
## no language specified: check browser language
if not guess:
guess = self.__getPreferredBrowserLanguage(availLangs)
## no preferred language or invalid language?
if not guess \
or not guess in availLangs \
or re.search(u'\W', guess):
## warn only for invalid languages
if not guess is None:
self.cbox.log.info("invalid language choosen: %s" % guess)
guess = self.prefs["WebSettings"]["Language"]
## maybe the language is still not valid
if not guess in availLangs:
self.log.warn("the configured language is invalid: %s" % guess)
guess = "en"
## maybe there is no english dataset???
if not guess in availLangs:
self.log.warn("couldn't find the english dataset")
guess = availLangs[0]
self.dataset["Settings.Language"] = guess
## we only have to save it, if it was specified correctly and explicitly
if value == guess:
self.dataset["Settings.LinkAttrs.weblang"] = guess
def __getPreferredBrowserLanguage(self, availLangs):
"""guess the preferred language of the user (as sent by the browser)
take the first language, that is part of 'availLangs'
"""
try:
pref_lang_header = cherrypy.request.headers["Accept-Language"]
except KeyError:
## no language header was specified
return None
## this could be a typical 'Accept-Language' header:
## de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
regex = re.compile(u"\w+(-\w+)?(;q=[\d\.]+)?$")
pref_langs = [e.split(";",1)[0]
for e in pref_lang_header.split(",")
if regex.match(e)]
## is one of these preferred languages available?
for lang in pref_langs:
if lang in availLangs: return lang
## we try to be nice: also look for "de" if "de-de" was specified ...
for lang in pref_langs:
## use only the first part of the language
short_lang = lang.split("-",1)[0]
if short_lang in availLangs: return short_lang
## we give up
return None
def __setDevice(self, device):
if device and re.match(u'[\w /\-]+$', device) and self.cbox.getContainer(device):
self.log.debug("select device: %s" % device)
return True
else:
self.log.warn("invalid device: %s" % device)
self.dataset["Data.Warning"] = "InvalidDevice"
return False
def __checkVolumeName(self, name):
if name and re.match(u'[\w \-]+$', name):
return True
else:
return False
def __getLanguageValue(self, value):
hdf = self.__getLanguageData(self.dataset["Settings.Language"])
return hdf.getValue(value, "")
def __getLanguageData(self, web_lang="en"):
default_lang = "en"
conf_lang = self.prefs["WebSettings"]["Language"]
hdf = neo_util.HDF()
langDir = os.path.abspath(self.prefs["Locations"]["LangDir"])
langFiles = []
## first: read default language (en)
if (default_lang != conf_lang) and (default_lang != web_lang):
langFiles.append(os.path.join(langDir, default_lang + ".hdf"))
## second: read language as defined in the config file
if (conf_lang != web_lang):
langFiles.append(os.path.join(langDir, conf_lang + ".hdf"))
## third: read language as configured via web interface
langFiles.append(os.path.join(langDir, web_lang + ".hdf"))
for langFile in langFiles:
if os.access(langFile, os.R_OK):
hdf.readFile(langFile)
else:
log.warn("Couldn't read language file: %s" % langFile)
return hdf
def __render(self, renderInfo, plugin=None):
'''renders from clearsilver templates and returns the resulting html
'''
## is renderInfo a string (filename of the template) or a dictionary?
if type(renderInfo) == types.DictType:
template = renderInfo["template"]
if renderInfo.has_key("generator"):
generator = renderInfo["generator"]
else:
generator = False
else:
(template, generator) = (renderInfo, None)
## load the language data
hdf = neo_util.HDF()
hdf.copy("Lang", self.__getLanguageData(self.dataset["Settings.Language"]))
## first: assume, that the template file is in the global template directory
self.dataset["Settings.TemplateFile"] = os.path.abspath(os.path.join(self.prefs["Locations"]["TemplateDir"], template + ".cs"))
if plugin:
## check, if the plugin provides the template file -> overriding
plugin_cs_file = plugin.getTemplateFileName(template)
if plugin_cs_file:
self.dataset["Settings.TemplateFile"] = plugin_cs_file
## add the current state of the plugins to the hdf dataset
self.dataset["Data.Status.Plugins.%s" % plugin.getName()] = plugin.getStatus()
## load the language data
pl_lang = plugin.getLanguageData(self.dataset["Settings.Language"])
if pl_lang:
hdf.copy("Lang.Plugins.%s" % plugin.getName(), pl_lang)
## load the dataset of the plugin
plugin.loadDataSet(hdf)
self.log.info("rendering site: " + template)
cs_path = os.path.abspath(os.path.join(self.prefs["Locations"]["TemplateDir"], "main.cs"))
if not os.access(cs_path, os.R_OK):
log.error("Couldn't read clearsilver file: %s" % cs_path)
yield "Couldn't read clearsilver file: %s" % cs_path
return
self.log.debug(self.dataset)
for key in self.dataset.keys():
hdf.setValue(key,str(self.dataset[key]))
cs = neo_cs.CS(hdf)
cs.parseFile(cs_path)
## is there a generator containing additional information?
if generator is None:
## all content in one flush
yield cs.render()
else:
content_generate = generator()
dummy_line = """<!-- CONTENT_DUMMY -->"""
## now we do it linewise - checking for the content marker
for line in cs.render().splitlines():
if line.find(dummy_line) != -1:
yield line.replace(dummy_line, content_generate.next())
else:
yield line + "\n"

View file

@ -0,0 +1,77 @@
"""
super class of all web interface unittests for the cryptobox
just inherit this class and add some test functions
"""
import unittest
import twill
import cherrypy
import WebInterfaceSites
## we do the following, for easy surfing
## e.g. use: cbx.go(your_url)
## commands api: http://twill.idyll.org/commands.html
CBXHOST="localhost"
CBXPORT=8081
CBX_URL="http://%s:%d/" % (CBXHOST, CBXPORT)
LOG_FILE="/tmp/twill.log"
class WebInterfaceTestClass(unittest.TestCase):
'''this class checks the webserver, using "twill"
the tests in this class are from the browsers point of view, so not
really unittests.
fetch twill from: http://twill.idyll.org
one way to manually run twill code is through the python
interpreter commandline e.g.:
import twill
twill.shell.main()
go http://localhost:8080
find "my very special html content"
help
'''
def setUp(self):
'''configures the cherrypy server that it works nice with twill
'''
cherrypy.config.update({
'server.logToScreen' : False,
'autoreload.on': False,
'server.threadPool': 1,
'server.environment': 'production',
})
cherrypy.root = WebInterfaceSites.WebInterfaceSites()
cherrypy.server.start(initOnly=True, serverClass=None)
from cherrypy._cpwsgi import wsgiApp
twill.add_wsgi_intercept(CBXHOST, CBXPORT, lambda: wsgiApp)
# grab the output of twill commands
self.output = open(LOG_FILE,"a")
twill.set_output(self.output)
self.cmd = twill.commands
self.URL = CBX_URL
self.cbox = cherrypy.root.cbox
self.globals, self.locals = twill.namespaces.get_twill_glocals()
def tearDown(self):
'''clean up the room when leaving'''
# remove intercept.
twill.remove_wsgi_intercept(CBXHOST, CBXPORT)
# shut down the cherrypy server.
cherrypy.server.stop()
self.output.close()
def __get_soup():
browser = twill.commands.get_browser()
soup = BeautifulSoup(browser.get_html())
return soup
def register_auth(self, url, user="admin", password="admin"):
self.cmd.add_auth("CryptoBox", url, user, password)

18
bin/coding_guidelines.txt Normal file
View file

@ -0,0 +1,18 @@
Maybe we can add some notes here to get a consistent coding experience :)
-------------------------------------------------------------------------------
comments:
- should be usable for pydoc
- ''' or """ at the beginning of every class/method
- ## for longterm comments, that are useful for understanding
- #blabla for codelines, that are out for experimenting and might be used later again
error handling:
- unspecific error handling is evil (try: "grep -r except: .")
unit testing:
- first write a unittest and then write the relating code until the unittest stops failing :)
- 'unittests.ClassName.py' should contain all tests for 'ClassName.py'
- commits with broken unit tests are evil (fix or disable the code (not the test ;) ))

83
bin/cryptobox.conf Normal file
View file

@ -0,0 +1,83 @@
[Main]
# comma separated list of possible prefixes for accesible devices
# beware: .e.g "/dev/hd" grants access to _all_ harddisks
AllowedDevices = /dev/loop, /dev/ubdb
# use sepepate config partition? (1=yes / 0=no)
UseConfigPartition = 1
# the default name prefix of not unnamed containers
DefaultVolumePrefix = "Disk "
# which cipher should cryptsetup-luks use?
#TODO: uml does not support this module - DefaultCipher = aes-cbc-essiv:sha256
DefaultCipher = aes-plain
# label of the configuration partition (you should never change this)
ConfigVolumeLabel = cbox_config
[Locations]
# where should we mount volumes?
# this directory must be writeable by the cryptobox user (see above)
MountParentDir = /var/cache/cryptobox/mnt
# settings directory: contains name database and plugin configuration
SettingsDir = /var/cache/cryptobox/settings
# where are the clearsilver templates?
#TemplateDir = /usr/share/cryptobox/templates
TemplateDir = ../templates
# path to language files
#LangDir = /usr/share/cryptobox/lang
LangDir = ../lang
# path to documentation files
#DocDir = /usr/share/doc/cryptobox/html
DocDir = ../doc/html
# path to the plugin directory
#PluginDir = /usr/share/cryptobox/plugins
PluginDir = ../plugins
[Log]
# possible values are "debug", "info", "warn" and "error" or numbers from
# 0 (debug) to 7 (error)
Level = debug
# where to write the log messages to?
# possible values are: file
# syslog support will be added later
Destination = file
# depending on the choosen destination (see above) you may select
# details. Possible values for the different destinations are:
# file: $FILENAME
# syslog: $LOG_FACILITY
#Details = /var/log/cryptobox.log
Details = ./cryptobox.log
[WebSettings]
# URL of default stylesheet
Stylesheet = /cryptobox-misc/cryptobox.css
# default language
Language = de
[Programs]
cryptsetup = /sbin/cryptsetup
mkfs-data = /sbin/mkfs.ext3
blkid = /sbin/blkid
blockdev = /sbin/blockdev
mount = /bin/mount
umount = /bin/umount
super = /usr/bin/super
# this is the "program" name as defined in /etc/super.tab
CryptoBoxRootActions = CryptoBoxRootActions

39
bin/cryptoboxd Executable file
View file

@ -0,0 +1,39 @@
#!/bin/sh
#TODO: CBXPATH=/usr/lib/cryptobox
CBXPATH=$(pwd)
CBXSERVER=CryptoBoxWebserver.py
PIDFILE=/var/run/cryptobox.pid
DAEMON=/usr/bin/python2.4
DAEMON_OPTS=${CBXPATH}/CryptoBoxWebserver.py
NAME=cryptoboxd
DESC="CryptoBox Daemon (webinterface)"
#TODO: RUNAS=cryptobox
RUNAS=$USERNAME
#test -x $DAEMON -a -f /etc/exports || exit 0
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --background --chdir "$CBXPATH" --chuid "$RUNAS" --start --quiet --oknodo --user "$RUNAS" --make-pidfile --pidfile "$PIDFILE" --exec "$DAEMON" \
-- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
#FIXME: this is the same as "killall python2.4"
# using a pid file instead prevents problems, but does not kill children???
start-stop-daemon --stop --oknodo --exec "$DAEMON"
echo "$NAME."
;;
*)
echo "Usage: $(basename $0) {start|stop}" >&2
exit 1
;;
esac
exit 0

View file

@ -0,0 +1,17 @@
[global]
server.socketPort = 8080
#server.environment = "production"
server.environment = "development"
server.logToScreen = True
server.log_tracebacks = True
server.threadPool = 1
server.reverseDNS = False
server.logFile = "cryptoboxwebserver.log"
[/favicon.ico]
static_filter.on = True
# TODO: use live-cd/live-cd-tree.d/var/www/favicon.ico
static_filter.file = "/usr/share/doc/python-cherrypy/cherrypy/favicon.ico"
[/test_stream]
stream_response = True

22
bin/do_unittests.sh Executable file
View file

@ -0,0 +1,22 @@
#!/bin/sh
#
# run this script _before_ you do a commit and fix errors before uploading
#
# check if /dev/loop1 is available - otherwise some tests will fail!
if /sbin/losetup /dev/loop1 &>/dev/null
then true
else echo "misconfiguration detected: sorry - you need /dev/loop1 for the tests" >&2
echo "just do the following:" >&2
echo " dd if=/dev/zero of=test.img bs=1M count=1 seek=100" >&2
echo " sudo /sbin/losetup /dev/loop1 test.img" >&2
echo "then you can run the tests again ..." >&2
echo >&2
exit 1
fi
# do the tests
for a in unittests.*.py
do testoob -v "$a"
done

2
bin/example-super.tab Normal file
View file

@ -0,0 +1,2 @@
# adapt the following line to your local setup and add it to /etc/super.tab
CryptoBoxRootActions /your/local/path/to/CryptoBoxRootActions.py yourUserName

116
bin/test.complete.CryptoBox.py Executable file
View file

@ -0,0 +1,116 @@
#!/usr/bin/env python2.4
"""
BEWARE: this script may overwrite the data of one of your loop devices. You
should restrict the AllowedDevices directive in cryptobox.conf to exclude
your precious black devices from being used by this script.
the following script runs a number of tests for different parts
"""
from CryptoBox import CryptoBoxProps
from CryptoBoxContainer import CryptoBoxContainer
import sys
def main():
cb = CryptoBoxProps()
print "Confguration:"
print "\tConfig file:\t\t%s" % (cb.prefs.prefs.filename, )
print "\tAllowed devices:\t%s" % (cb.prefs["Main"]["AllowedDevices"], )
"""for e in cb.getContainerList(filterType=CryptoBoxContainer.Types["luks"]):"""
for e in cb.getContainerList():
print "\t\t%d\t\t%s - %s - %d" % (cb.getContainerList().index(e), e.getDevice(), e.getName(), e.getType())
if not cb.getContainerList() or len(cb.getContainerList()) < 1:
print "no loop devices found for testing"
sys.exit(1)
if len(cb.getContainerList()) > 1:
print "I found more than one available loop device - I will stop now to avoid risking data loss."
print "Please change the 'AllowedDevices' setting in 'cryptobox.conf' to reduce the number of allowed devices to only one."
sys.exit(1)
testElement = cb.getContainerList()[0]
print "\nRunning some tests now ..."
if not plain_tests(testElement):
print "some previous tests failed - we should stop now"
sys.exit(1)
luks_tests(testElement)
" ***************** some functions ******************** "
def luks_tests(e):
# umount if necessary
try:
e.umount()
except "MountError":
pass
e.create(e.Types["luks"], "alt")
print "\tluks create:\tok"
e.changePassword("alt","neu")
print "\tluks changepw:\tok"
e.setName("lalla")
print "\tluks setName:\tok"
try:
e.mount("neu")
except "MountError":
pass
if e.isMounted(): print "\tluks mount:\tok"
else: print "\tluks mount:\tfailed"
print "\tCapacity (size, free, used) [MB]:\t%s" % (e.getCapacity(), )
try:
e.umount()
except "MountError":
pass
if e.isMounted(): print "\tluks umount:\tfailed"
else: print "\tluks umount:\tok"
if e.isMounted(): return False
else: return True
def plain_tests(e):
# umount if necessary
try:
e.umount()
except "MountError":
pass
e.create(e.Types["plain"])
print "\tplain create:\tok"
e.setName("plain-lili")
print "\tplain setName:\tok"
try:
e.mount()
except "MountError":
pass
if e.isMounted(): print "\tplain mount:\tok"
else: print "\tplain mount:\tfailed"
print "\tCapacity (size, free, used) [MB]:\t%s" % (e.getCapacity(), )
try:
e.umount()
except "MountError":
pass
if e.isMounted(): print "\tplain umount:\tfailed"
else: print "\tplain umount:\tok"
if e.isMounted(): return False
else: return True
# ************ main ****************
main()

23
bin/uml-setup.sh Executable file
View file

@ -0,0 +1,23 @@
#!/bin/sh
ROOT_IMG=/home/lars/devel-stuff/devel-chroots/cryptobox.img
TEST_IMG=test.img
TEST_SIZE=256
MEM_SIZE=128M
# Preparations:
# echo "tun" >>/etc/modules
# follow the instructions in /usr/share/doc/uml-utilities/README.Debian
# add your user to the group 'uml-net'
#
/sbin/ifconfig tap0 &>/dev/null || { echo "tap0 is not configured - read /usr/share/doc/uml-utilities/README.Debian for hints"; exit 1; }
if [ ! -e "$TEST_IMG" ]
then echo "Creating testing image file ..."
dd if=/dev/zero of="$TEST_IMG" bs=1M count=$TEST_SIZE
fi
linux ubd0="$ROOT_IMG" ubd1="$TEST_IMG" con=xterm hostfs=../ fakehd eth0=daemon mem=$MEM_SIZE

138
bin/unittests.CryptoBox.py Executable file
View file

@ -0,0 +1,138 @@
#!/usr/bin/env python2.4
import unittest
import sys
from CryptoBox import *
from CryptoBoxExceptions import *
import CryptoBoxSettings
class CryptoBoxPropsDeviceTests(unittest.TestCase):
import CryptoBox
cb = CryptoBox.CryptoBoxProps()
def testAllowedDevices(self):
'''isDeviceAllowed should accept permitted devices'''
self.assertTrue(self.cb.isDeviceAllowed("/dev/loop"))
self.assertTrue(self.cb.isDeviceAllowed("/dev/loop1"))
self.assertTrue(self.cb.isDeviceAllowed("/dev/loop/urgd"))
self.assertTrue(self.cb.isDeviceAllowed("/dev/usb/../loop1"))
def testDeniedDevices(self):
'''isDeviceAllowed should fail with not explicitly allowed devices'''
self.assertFalse(self.cb.isDeviceAllowed("/dev/hda"))
self.assertFalse(self.cb.isDeviceAllowed("/dev/loopa/../hda"))
self.assertFalse(self.cb.isDeviceAllowed("/"))
class CryptoBoxPropsConfigTests(unittest.TestCase):
'''test here if everything with the config turns right'''
import os
import CryptoBox
files = {
"configFileOK" : "cbox-test_ok.conf",
"configFileBroken" : "cbox-test_broken.conf",
"nameDBFile" : "cryptobox_names.db",
"pluginConf" : "cryptobox_plugins.conf",
"userDB" : "cryptobox_users.db",
"logFile" : "cryptobox.log",
"tmpdir" : "cryptobox-mnt" }
tmpdirname = ""
filenames = {}
configContentOK = """
[Main]
AllowedDevices = /dev/loop
DefaultVolumePrefix = "Data "
DefaultCipher = aes-cbc-essiv:sha256
[Locations]
SettingsDir = %s
MountParentDir = %s
TemplateDir = ../templates
LangDir = ../lang
DocDir = ../doc/html
PluginDir = ../plugins
[Log]
Level = debug
Destination = file
Details = %s/cryptobox.log
[WebSettings]
Stylesheet = /cryptobox-misc/cryptobox.css
[Programs]
blkid = /sbin/blkid
cryptsetup = /sbin/cryptsetup
super = /usr/bin/super
CryptoBoxRootActions = CryptoBoxRootActions
"""
def setUp(self):
'''generate all files in tmp and remember the names'''
import tempfile
os = self.os
self.tmpdirname = tempfile.mkdtemp(prefix="cbox-")
for file in self.files.keys():
self.filenames[file] = os.path.join(self.tmpdirname, self.files[file])
self.writeConfig()
def tearDown(self):
'''remove the created tmpfiles'''
os = self.os
# remove temp files
for file in self.filenames.values():
compl_name = os.path.join(self.tmpdirname, file)
if os.path.exists(compl_name):
os.remove(compl_name)
# remove temp dir
os.rmdir(self.tmpdirname)
def testConfigInit(self):
'''Check various branches of config file loading'''
import os
self.assertRaises(CBConfigUnavailableError, self.CryptoBox.CryptoBoxProps,"/invalid/path/to/config/file")
self.assertRaises(CBConfigUnavailableError, self.CryptoBox.CryptoBoxProps,"/etc/shadow")
""" check one of the following things:
1) are we successfully using an existing config file?
2) do we break, if no config file is there?
depending on the existence of a config file, only one of these conditions
can be checked - hints for more comprehensive tests are appreciated :) """
for a in CryptoBoxSettings.CryptoBoxSettings.CONF_LOCATIONS:
if os.path.exists(a):
self.CryptoBox.CryptoBoxProps()
break # this skips the 'else' clause
else: self.assertRaises(CBConfigUnavailableError, self.CryptoBox.CryptoBoxProps)
self.assertRaises(CBConfigUnavailableError, self.CryptoBox.CryptoBoxProps,[])
def testBrokenConfigs(self):
"""Check various broken configurations"""
self.writeConfig("SettingsDir", "SettingsDir=/foo/bar", filename=self.filenames["configFileBroken"])
self.assertRaises(CBConfigError, self.CryptoBox.CryptoBoxProps,self.filenames["configFileBroken"])
self.writeConfig("Level", "Level = ho", filename=self.filenames["configFileBroken"])
self.assertRaises(CBConfigError, self.CryptoBox.CryptoBoxProps,self.filenames["configFileBroken"])
self.writeConfig("Details", "#out", filename=self.filenames["configFileBroken"])
self.assertRaises(CBConfigError, self.CryptoBox.CryptoBoxProps,self.filenames["configFileBroken"])
self.writeConfig("super", "super=/bin/invalid/no", filename=self.filenames["configFileBroken"])
self.assertRaises(CBConfigError, self.CryptoBox.CryptoBoxProps,self.filenames["configFileBroken"])
self.writeConfig("CryptoBoxRootActions", "#not here", filename=self.filenames["configFileBroken"])
self.assertRaises(CBConfigError, self.CryptoBox.CryptoBoxProps,self.filenames["configFileBroken"])
self.writeConfig("CryptoBoxRootActions", "CryptoBoxRootActions = /bin/false", filename=self.filenames["configFileBroken"])
self.assertRaises(CBEnvironmentError, self.CryptoBox.CryptoBoxProps,self.filenames["configFileBroken"])
def writeConfig(self, replace=None, newline=None, filename=None):
"""write a config file and (optional) replace a line in it"""
import re
if not filename: filename = self.filenames["configFileOK"]
content = self.configContentOK % (self.tmpdirname, self.tmpdirname, self.tmpdirname)
if replace:
pattern = re.compile('^' + replace + '\\s*=.*$', flags=re.M)
content = re.sub(pattern, newline, content)
cf = open(filename, "w")
cf.write(content)
cf.close()
if __name__ == "__main__":
unittest.main()

48
bin/unittests.CryptoBoxTools.py Executable file
View file

@ -0,0 +1,48 @@
#!/usr/bin/env python2.4
import unittest
import CryptoBoxTools
import os
class CryptoBoxToolsTests(unittest.TestCase):
def testGetAbsoluteDeviceName(self):
func = CryptoBoxTools.getAbsoluteDeviceName
self.assertTrue(func("hda") == "/dev/hda")
self.assertTrue(func("loop0") == "/dev/loop0")
self.assertTrue(func(os.path.devnull) == os.path.devnull)
def testFindMajorMinorOfDevice(self):
func = CryptoBoxTools.findMajorMinorOfDevice
self.assertTrue(func("/dev/hda") == (3,0))
self.assertTrue(func("/dev/hda1") == (3,1))
self.assertTrue(func(os.path.devnull) == (1,3))
self.assertTrue(func("/dev/nothere") is None)
def testFindMajorMinorDeviceName(self):
func = CryptoBoxTools.findMajorMinorDeviceName
dir = os.path.join(os.path.sep, "dev")
self.assertTrue(os.path.join(dir,"hda") in func(dir,3,0))
self.assertTrue(os.path.devnull in func(dir,1,3))
self.assertFalse(os.path.devnull in func(dir,2,3))
def testIsPartOfBlockDevice(self):
func = CryptoBoxTools.isPartOfBlockDevice
self.assertTrue(func("/dev/hda", "/dev/hda1"))
self.assertFalse(func("/dev/hda", "/dev/hda"))
self.assertFalse(func("/dev/hda1", "/dev/hda"))
self.assertFalse(func("/dev/hda1", "/dev/hda1"))
self.assertFalse(func("/dev/hda", "/dev/hdb1"))
self.assertFalse(func(None, "/dev/hdb1"))
self.assertFalse(func("/dev/hda", None))
self.assertFalse(func(None, ""))
self.assertFalse(func("loop0", "loop1"))
if __name__ == "__main__":
unittest.main()

33
bin/unittests.Plugins.py Executable file
View file

@ -0,0 +1,33 @@
#!/usr/bin/python2.4
import unittest
import Plugins
class CheckForUndefinedTestCases(unittest.TestCase):
"""here we will add failing test functions for every non-existing testcase"""
def create_testcases():
plugins = Plugins.PluginManager(None, "../plugins").getPlugins()
glob_dict = globals()
loc_dict = locals()
for pl in plugins:
test_class = pl.getTestClass()
if test_class:
## add the testclass to the global dictionary
glob_dict["unittest" + pl.getName()] = test_class
else:
subname = "test_existence_%s" % pl.getName()
def test_existence(self):
"""check if the plugin (%s) contains tests""" % pl.getName()
self.fail("no tests defined for plugin: %s" % pl.getName())
## add this function to the class above
setattr(CheckForUndefinedTestCases, subname, test_existence)
#FIXME: the failure output always contains the same name for all plugins
create_testcases()
if __name__ == "__main__":
unittest.main()

39
bin/unittests.WebSites.py Executable file
View file

@ -0,0 +1,39 @@
#!/usr/bin/env python2.4
import unittest
## this makes assertRaises shorter
from twill.errors import *
from mechanize import BrowserStateError, LinkNotFoundError
## import the module of the common super class of all web interface test classes
import WebInterfaceTestClass
class WebServer(WebInterfaceTestClass.WebInterfaceTestClass):
def test_is_server_running(self):
'''the server should run under given name and port'''
self.cmd.go(self.URL)
## other URLs must not be checked, as we do not know, if they are valid
class BuiltinPages(WebInterfaceTestClass.WebInterfaceTestClass):
def test_goto_index(self):
'''display all devices'''
self.cmd.go(self.URL + "?weblang=en")
self.cmd.find("The CryptoBox")
self.cmd.go(self.URL + "?weblang=de")
self.cmd.find("Die CryptoBox")
self.cmd.go(self.URL + "?weblang=si")
self.cmd.find("Privatnost v vsako vas")
self.cmd.go(self.URL + "?weblang=fr")
self.cmd.find("La CryptoBox")
if __name__ == "__main__":
unittest.main()

View file

@ -1,6 +1,5 @@
CryptoBox for Debian - installation notes
be aware of two things:
be aware of one thing:
1) you need cryptsetup with luks support (for now only in unstable)
2) the debian perl-clearsilver package is broken (at least until April 02006)

3
debian/control vendored
View file

@ -7,8 +7,7 @@ Standards-Version: 3.6.2
Package: cryptobox
Architecture: any
Depends: bash (>=2.0), sed (>=4.0), coreutils, grep (>=2.0), perl, httpd-cgi, hashalot, libconfigfile-perl, cryptsetup (>=20050111), dmsetup, pmount, initscripts, e2fsprogs (>= 1.27), adduser
Recommends: perl-clearsilver
Depends: bash (>=2.0), sed (>=4.0), coreutils, grep (>=2.0), httpd-cgi, hashalot, cryptsetup (>=20050111), dmsetup, initscripts, e2fsprogs (>= 1.27), adduser, python (>=2.4), python-clearsilver
Suggests: cron, samba
Description: Web interface for an encrypting fileserver
This bundle of scripts and cgis allow you to manage an encrypted harddisk

7
debian/rules vendored
View file

@ -74,19 +74,14 @@ binary-arch: build install
# dh_installmenu
# dh_installdebconf
# dh_installlogrotate
# dh_installemacsen
# dh_installpam
# dh_installmime
dh_installinit
# dh_installcron
# dh_installinfo
dh_installman
dh_link
dh_strip
dh_compress
dh_fixperms
dh_perl
# dh_python
dh_python
# dh_makeshlibs
dh_installdeb
dh_shlibdeps

View file

@ -0,0 +1,265 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
id="svg12523"
sodipodi:version="0.32"
inkscape:version="0.44.1"
sodipodi:docbase="/home/lars/subversion/cryptobox/branches/pythonrewrite/design"
sodipodi:docname="background_frame_corner.svg"
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/background_frame_corner.png"
inkscape:export-xdpi="76.669998"
inkscape:export-ydpi="76.669998">
<defs
id="defs12525">
<linearGradient
id="linearGradient18003">
<stop
id="stop18005"
offset="0"
style="stop-color:#bbb;stop-opacity:1;" />
<stop
id="stop18007"
offset="0.89510489"
style="stop-color:#d6d6d6;stop-opacity:1;" />
<stop
id="stop18009"
offset="1"
style="stop-color:white;stop-opacity:0" />
</linearGradient>
<linearGradient
id="linearGradient6436">
<stop
id="stop6438"
offset="0"
style="stop-color:#bbb;stop-opacity:1;" />
<stop
id="stop6440"
offset="0.79720283"
style="stop-color:#d6d6d6;stop-opacity:1;" />
<stop
id="stop6442"
offset="1"
style="stop-color:white;stop-opacity:0" />
</linearGradient>
<linearGradient
id="linearGradient2840">
<stop
id="stop2842"
offset="0"
style="stop-color:#ececec;stop-opacity:1;" />
<stop
style="stop-color:#dfdfdf;stop-opacity:1;"
offset="0.15000001"
id="stop2844" />
<stop
id="stop2846"
offset="0.5"
style="stop-color:#bbb;stop-opacity:1;" />
<stop
id="stop2848"
offset="0.85000002"
style="stop-color:#dfdfdf;stop-opacity:1;" />
<stop
id="stop2850"
offset="1"
style="stop-color:#ececec;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient13418">
<stop
style="stop-color:#bbb;stop-opacity:1;"
offset="0"
id="stop19661" />
<stop
style="stop-color:#d6d6d6;stop-opacity:1;"
offset="0.60000002"
id="stop19659" />
<stop
style="stop-color:#e8e8e8;stop-opacity:1;"
offset="1"
id="stop13422" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient13418"
id="linearGradient14319"
x1="146.42857"
y1="295.93362"
x2="602.14288"
y2="615.21936"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.033937,0,0,0.470464,-111.0592,119.9379)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient13418"
id="linearGradient16109"
x1="-698.64288"
y1="480.93362"
x2="-212.78571"
y2="480.93362"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1.205649,0,0,-1,-80.86,1421.867)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient13418"
id="linearGradient4644"
x1="-552.84717"
y1="342.28833"
x2="-538.43823"
y2="747.75262"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000688,0,0,0.742585,0.284584,81.76713)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6436"
id="linearGradient9992"
x1="-579.13184"
y1="815.78918"
x2="-449.77423"
y2="861.64172"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient13418"
id="linearGradient10889"
x1="-458.1723"
y1="815.36176"
x2="-583.6474"
y2="880.30389"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6436"
id="linearGradient11778"
gradientUnits="userSpaceOnUse"
x1="-579.13184"
y1="815.78918"
x2="-449.77423"
y2="861.64172"
gradientTransform="translate(197.7436,-1.863711)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient13418"
id="linearGradient11780"
gradientUnits="userSpaceOnUse"
x1="-458.1723"
y1="815.36176"
x2="-583.6474"
y2="880.30389"
gradientTransform="translate(197.7436,-1.863711)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient13418"
id="linearGradient15346"
x1="269.42987"
y1="-1149.713"
x2="277.02573"
y2="-889.35199"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.998222,0,0,1.625694,0.597727,563.6477)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.45801722"
inkscape:cx="132.53452"
inkscape:cy="-117.51501"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1024"
inkscape:window-height="693"
inkscape:window-x="0"
inkscape:window-y="26" />
<metadata
id="metadata12528">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:white;stroke:url(#linearGradient14319);stroke-width:3.5587604;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
id="rect12531"
width="713.87738"
height="431.0202"
x="47.493656"
y="262.41977"
rx="4.4825716"
ry="3.7824252"
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/background_frame_corner.png"
inkscape:export-xdpi="75.269997"
inkscape:export-ydpi="75.269997" />
<path
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient16109);stroke-width:3.29406023;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 759.64935,940.93361 L 177.49352,940.93361"
id="path15208"
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/footer_line.png"
inkscape:export-xdpi="76"
inkscape:export-ydpi="76" />
<rect
style="fill:white;fill-opacity:1;stroke:url(#linearGradient4644);stroke-width:3.06796598;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3737"
width="714.36841"
height="320.06937"
x="-770.91931"
y="337.26691"
rx="4.4856548"
ry="2.8087742"
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/background_frame_top.png"
inkscape:export-xdpi="87.809998"
inkscape:export-ydpi="87.809998" />
<rect
style="fill:url(#linearGradient9992);fill-opacity:1;stroke:url(#linearGradient10889);stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4648"
width="118"
height="48"
x="-582.87494"
y="812.25867"
rx="10"
ry="10" />
<rect
style="fill:url(#linearGradient11778);fill-opacity:1;stroke:url(#linearGradient11780);stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:0.5"
id="rect11776"
width="118"
height="48"
x="-385.13144"
y="810.3949"
rx="10"
ry="10" />
<rect
style="opacity:0.4;fill:url(#linearGradient15346);fill-opacity:1.0;stroke:none;stroke-width:5.09556913;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect12667"
width="614.90448"
height="400"
x="28.62841"
y="-1302.1809"
rx="10"
ry="10"
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/volume_property_frame.png"
inkscape:export-xdpi="102.45493"
inkscape:export-ydpi="102.45493"
transform="scale(-1,-1)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.8 KiB

View file

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.44.1"
sodipodi:docbase="/home/lars/subversion/cryptobox/branches/pythonrewrite/design"
sodipodi:docname="icon_background_active.svg"
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/icon_background_passive_100.png"
inkscape:export-xdpi="22.5"
inkscape:export-ydpi="22.5">
<defs
id="defs4">
<linearGradient
id="linearGradient2760">
<stop
style="stop-color:#9b9b9b;stop-opacity:0.22522523;"
offset="0"
id="stop2762" />
<stop
id="stop2768"
offset="0.85314685"
style="stop-color:#c8c8c8;stop-opacity:0.1891892;" />
<stop
style="stop-color:#e9e5e9;stop-opacity:0;"
offset="1"
id="stop2764" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2760"
id="radialGradient2766"
cx="308.57141"
cy="383.79077"
fx="308.57141"
fy="383.79077"
r="271.92856"
gradientTransform="matrix(1.378293,-3.957684e-7,1.759598e-7,1.129975,-189.6586,-48.38559)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="350"
inkscape:cy="524.28571"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1024"
inkscape:window-height="693"
inkscape:window-x="0"
inkscape:window-y="26" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:url(#radialGradient2766);fill-opacity:1;fill-rule:evenodd;stroke:#9c9c9c;stroke-width:2.55945635;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect1872"
width="397.44052"
height="437.44055"
x="36.922581"
y="166.57048"
rx="3.6606367"
ry="4.9709153" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -0,0 +1,245 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48.000000px"
height="48.000000px"
id="svg53383"
sodipodi:version="0.32"
inkscape:version="0.43+devel"
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/categories"
sodipodi:docname="applications-system.svg">
<defs
id="defs3">
<linearGradient
id="linearGradient3264">
<stop
style="stop-color:#c9c9c9;stop-opacity:1;"
offset="0"
id="stop3266" />
<stop
id="stop3276"
offset="0.25"
style="stop-color:#f8f8f8;stop-opacity:1;" />
<stop
id="stop3272"
offset="0.5"
style="stop-color:#e2e2e2;stop-opacity:1;" />
<stop
style="stop-color:#b0b0b0;stop-opacity:1;"
offset="0.75"
id="stop3274" />
<stop
style="stop-color:#c9c9c9;stop-opacity:1;"
offset="1"
id="stop3268" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3264"
id="linearGradient3281"
gradientUnits="userSpaceOnUse"
x1="14.462892"
y1="12.284524"
x2="34.534348"
y2="39.684914"
gradientTransform="matrix(1.241935,0,0,1.241935,-5.027508,-7.208988)" />
<linearGradient
id="linearGradient2300">
<stop
id="stop2302"
offset="0.0000000"
style="stop-color:#000000;stop-opacity:0.32673267;" />
<stop
id="stop2304"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="aigrd1"
gradientUnits="userSpaceOnUse"
x1="99.7773"
y1="15.4238"
x2="153.0005"
y2="248.6311">
<stop
offset="0"
style="stop-color:#184375"
id="stop53300" />
<stop
offset="1"
style="stop-color:#C8BDDC"
id="stop53302" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#aigrd1"
id="linearGradient53551"
gradientUnits="userSpaceOnUse"
x1="99.7773"
y1="15.4238"
x2="153.0005"
y2="248.6311"
gradientTransform="matrix(0.200685,0.000000,0.000000,0.200685,-0.585758,-1.050787)" />
<radialGradient
gradientUnits="userSpaceOnUse"
r="11.689870"
fy="72.568001"
fx="14.287618"
cy="68.872971"
cx="14.287618"
gradientTransform="matrix(1.399258,-2.234445e-7,8.196178e-8,0.513264,4.365074,4.839285)"
id="radialGradient2308"
xlink:href="#linearGradient2300"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3264"
id="linearGradient3760"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.241935,0,0,1.241935,-5.027508,-7.208988)"
x1="14.462892"
y1="12.284524"
x2="34.534348"
y2="39.684914" />
<linearGradient
inkscape:collect="always"
xlink:href="#aigrd1"
id="linearGradient3773"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.200685,0,0,0.200685,-54.33576,-1.050787)"
x1="99.7773"
y1="15.4238"
x2="153.0005"
y2="248.6311" />
</defs>
<sodipodi:namedview
inkscape:showpageshadow="false"
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.11764706"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6568542"
inkscape:cx="43.652227"
inkscape:cy="21.164787"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="872"
inkscape:window-height="697"
inkscape:window-x="2398"
inkscape:window-y="249" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>System Applications</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz/</dc:source>
<dc:subject>
<rdf:Bag>
<rdf:li>system</rdf:li>
<rdf:li>applications</rdf:li>
<rdf:li>group</rdf:li>
<rdf:li>category</rdf:li>
<rdf:li>admin</rdf:li>
<rdf:li>root</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by/2.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="shadow"
id="layer2"
inkscape:groupmode="layer">
<path
transform="matrix(1.186380,0.000000,0.000000,1.186380,-4.539687,-7.794678)"
d="M 44.285715 38.714287 A 19.928572 9.8372450 0 1 1 4.4285717,38.714287 A 19.928572 9.8372450 0 1 1 44.285715 38.714287 z"
sodipodi:ry="9.8372450"
sodipodi:rx="19.928572"
sodipodi:cy="38.714287"
sodipodi:cx="24.357143"
id="path1538"
style="color:#000000;fill:url(#radialGradient2308);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
</g>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
inkscape:r_cy="true"
inkscape:r_cx="true"
style="opacity:1;color:#000000;fill:url(#linearGradient3773);fill-opacity:1;fill-rule:nonzero;stroke:#3f4561;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 22.699525,0.94746963 C 22.22635,0.97984519 21.766437,1.0531317 21.301673,1.1063165 L 21.269903,1.1063165 L 20.157975,7.1742671 C 18.345621,7.5870046 16.640562,8.2874574 15.106644,9.2392765 L 10.118853,5.6493371 C 8.770521,6.6961412 7.543552,7.9170049 6.465374,9.2392765 L 9.928236,14.290607 C 8.876814,15.89739 8.086153,17.732094 7.640841,19.659632 C 7.640765,19.668743 7.640779,19.689813 7.640841,19.691401 L 1.60466,20.644482 C 1.494303,21.545851 1.445813,22.477386 1.445813,23.408418 C 1.445813,24.170171 1.466846,24.921747 1.541121,25.664043 L 7.577303,26.744202 C 8.0066,28.840363 8.822112,30.797987 9.960006,32.526228 L 6.370066,37.450482 C 7.398201,38.726866 8.585171,39.888962 9.864698,40.913343 L 14.947798,37.418712 C 16.724273,38.551956 18.707343,39.346604 20.856901,39.737877 L 21.809983,45.742288 C 22.487237,45.803935 23.181758,45.805827 23.874992,45.805827 C 24.853677,45.805826 25.788512,45.768738 26.734236,45.64698 L 27.877933,39.515491 C 29.91886,39.007587 31.836112,38.126493 33.501113,36.942172 L 38.393596,40.500342 C 39.662366,39.420897 40.822583,38.180154 41.824689,36.846863 L 38.266519,31.700225 C 39.230125,30.036028 39.897817,28.199859 40.23622,26.235892 L 46.240632,25.282811 C 46.29329,24.656221 46.30417,24.048546 46.30417,23.408418 C 46.30417,22.296018 46.174875,21.205317 46.018246,20.136172 L 39.918526,19.024244 C 39.440518,17.259164 38.656214,15.612364 37.662901,14.13176 L 41.25284,9.2075071 C 40.140075,7.8466524 38.870718,6.5895264 37.472284,5.5222596 L 32.293876,9.0804296 C 30.805549,8.200202 29.203897,7.5248159 27.464931,7.1424978 L 26.51185,1.1063165 C 25.644369,1.0042729 24.769749,0.94746963 23.874992,0.94746963 C 23.633166,0.94746964 23.384286,0.93986063 23.144296,0.94746963 C 23.027301,0.95117908 22.911525,0.94066346 22.794833,0.94746963 C 22.763228,0.94931296 22.73107,0.94531125 22.699525,0.94746963 z M 23.525529,16.387386 C 23.641592,16.381497 23.757473,16.387386 23.874992,16.387386 C 27.635598,16.387386 30.705408,19.457196 30.705408,23.217802 C 30.705409,26.978407 27.635597,30.016448 23.874992,30.016448 C 20.114387,30.016449 17.076346,26.978407 17.076346,23.217802 C 17.076347,19.574716 19.927558,16.569963 23.525529,16.387386 z "
id="path3243" />
<path
inkscape:r_cy="true"
inkscape:r_cx="true"
sodipodi:type="arc"
style="opacity:0.64772728;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.62180054;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="path3283"
sodipodi:cx="23.511301"
sodipodi:cy="23.781593"
sodipodi:rx="12.727922"
sodipodi:ry="12.727922"
d="M 36.239223 23.781593 A 12.727922 12.727922 0 1 1 10.783379,23.781593 A 12.727922 12.727922 0 1 1 36.239223 23.781593 z"
transform="matrix(0.616598,0,0,0.616598,9.38202,8.539674)" />
<path
inkscape:r_cy="true"
inkscape:r_cx="true"
id="path3285"
d="M 21.995808,2.1484671 L 21.103024,8.0235243 C 19.404254,8.4103946 16.279442,9.5936035 14.841657,10.485771 L 10.091975,6.9406268 C 8.828145,7.9218257 8.741474,7.9883656 7.730867,9.2277688 L 11.165063,14.320988 C 10.179537,15.827071 8.995796,18.510982 8.570778,20.42893 C 8.570778,20.42893 2.552988,21.443355 2.552988,21.443355 C 2.449547,22.288234 2.49926,24.096528 2.56888,24.792303 L 8.317097,25.82782 C 8.71949,27.79261 10.225324,30.955232 11.291904,32.575161 L 7.656902,37.377719 C 8.620601,38.57411 8.813474,38.683589 10.01281,39.64377 L 14.873441,36.082733 C 16.538581,37.144954 19.84373,38.437109 21.858571,38.80386 L 22.656299,44.604952 C 23.291109,44.662736 25.044829,44.824827 25.931283,44.710701 L 26.824066,38.671821 C 28.737084,38.195749 32.042539,36.838896 33.603191,35.728798 L 38.458624,39.236958 C 39.647878,38.225166 39.658533,38.072709 40.597835,36.822978 L 36.999815,31.708667 C 37.90303,30.148767 39.070902,27.098068 39.388097,25.257187 L 45.279046,24.279744 C 45.328399,23.692424 45.330802,22.054578 45.18399,21.052439 L 39.182092,20.016922 C 38.73404,18.362463 37.196418,15.381153 36.265359,13.993342 L 40.080075,9.1907857 C 39.037052,7.915218 38.64924,7.7402002 37.338448,6.7398212 L 32.313994,10.337839 C 30.918941,9.5127782 28.137095,8.2550417 26.507114,7.8966842 L 25.619528,2.1484671 C 24.806414,2.0528187 22.460488,2.0952921 21.995808,2.1484671 z "
style="opacity:0.34659089;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999923;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccc" />
<path
style="opacity:0.5;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 10.102903,6.2970655 C 8.7545689,7.3438694 8.1656464,7.9719226 7.0874684,9.2941942 L 10.489927,14.259153 C 9.4385072,15.857755 8.3316275,18.426114 8.1423859,19.987706 C 8.1423859,19.987706 2.0798859,21.0319 2.0798859,21.0319 C 2.0109129,21.595256 1.90625,22.884803 1.90625,22.884803 L 2.0830267,24.447303 C 2.5107567,24.535638 2.9231817,24.617818 3.3642767,24.666053 L 3.8642767,23.134803 C 4.2083177,23.163279 4.5439297,23.197303 4.8955267,23.197303 C 5.2467347,23.197303 5.6139847,23.163473 5.9580267,23.134803 L 6.4267767,24.666053 C 6.8680647,24.617818 7.3115487,24.535638 7.7392767,24.447303 L 7.7392767,22.884803 C 8.4250337,22.72518 9.0712777,22.497045 9.7080267,22.228553 L 10.645527,23.509803 C 11.047878,23.327709 11.421123,23.133984 11.801777,22.916053 L 11.301777,21.416053 C 11.89901,21.053803 12.463529,20.620706 12.989277,20.166053 L 14.270527,21.103553 C 14.596162,20.806973 14.91164,20.491691 15.208027,20.166053 L 14.270527,18.916053 C 14.725373,18.390305 15.127027,17.826171 15.489277,17.228553 L 16.989277,17.697303 C 17.207208,17.316456 17.432571,16.943209 17.614277,16.541053 L 16.333027,15.603553 C 16.601517,14.966804 16.798016,14.320561 16.958027,13.634803 L 18.551777,13.634803 C 18.640112,13.207076 18.691236,12.763591 18.739277,12.322303 L 17.239277,11.853553 C 17.268139,11.509705 17.301777,11.142456 17.301777,10.791053 C 17.301776,10.43965 17.267753,10.104039 17.239277,9.7598034 L 18.739277,9.2910534 C 18.69373,8.8711662 18.633686,8.4490548 18.551777,8.0410534 C 17.404349,8.4403544 15.999117,9.1941729 14.983265,9.8245243 L 10.102903,6.2970655 z "
id="path3767"
inkscape:r_cx="true"
inkscape:r_cy="true"
sodipodi:nodetypes="cccccccccsccccccccccccccccccccsccccc" />
<path
style="opacity:0.5;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 37.236641,17.217754 C 36.85286,17.39913 36.490003,17.603509 36.123236,17.813295 L 36.692886,19.548136 C 35.995792,19.970436 35.338156,20.467825 34.725008,20.998151 L 33.249099,19.910639 C 32.869013,20.256538 32.507327,20.618223 32.161588,20.998151 L 33.249099,22.474059 C 32.718773,23.087371 32.221547,23.745002 31.799084,24.441937 L 31.255328,24.260685 C 31.207646,24.960968 31.018949,25.62217 30.737466,26.228563 L 30.841038,26.306242 C 30.527881,27.048922 30.27649,27.83664 30.090137,28.636624 L 28.614229,28.636624 C 28.477946,28.722076 28.343676,28.821684 28.199938,28.895555 C 28.121568,29.310822 28.065026,29.712881 28.018687,30.138426 L 29.77942,30.708074 C 29.746033,31.10935 29.727633,31.515269 29.727633,31.925052 C 29.727631,32.334993 29.746034,32.740753 29.77942,33.142029 L 28.018687,33.711677 C 28.074705,34.226432 28.148678,34.740347 28.251725,35.239372 L 30.090137,35.213479 C 30.218255,35.763466 30.393202,36.320918 30.582107,36.844746 C 31.327023,36.557466 32.05594,36.214561 32.731236,35.809021 C 32.319649,34.59298 32.083908,33.279913 32.083908,31.925052 C 32.083909,26.727119 35.376289,22.288397 39.981313,20.583861 L 38.893802,20.402608 C 38.671014,19.579946 38.382478,18.774017 38.013435,18.020441 C 38.002581,17.998277 37.99851,17.96486 37.987542,17.942761 L 37.935756,17.890975 L 37.236641,17.217754 z "
id="path3770"
inkscape:r_cx="true"
inkscape:r_cy="true" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,738 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48.000000px"
height="48.000000px"
id="svg2327"
sodipodi:version="0.32"
inkscape:version="0.42+devel"
sodipodi:docbase="/home/jimmac/gfx/ximian/tango-icon-theme/scalable/devices"
sodipodi:docname="computer.svg">
<defs
id="defs3">
<linearGradient
id="linearGradient2985"
inkscape:collect="always">
<stop
id="stop2987"
offset="0"
style="stop-color:#d8dfd6;stop-opacity:1;" />
<stop
id="stop2989"
offset="1"
style="stop-color:#d8dfd6;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient2752">
<stop
id="stop2754"
offset="0"
style="stop-color:#9d9d9d;stop-opacity:1;" />
<stop
id="stop2756"
offset="1.0000000"
style="stop-color:#b9b9b9;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient2711">
<stop
id="stop2713"
offset="0.0000000"
style="stop-color:#909090;stop-opacity:1.0000000;" />
<stop
id="stop2715"
offset="1.0000000"
style="stop-color:#bebebe;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient2701">
<stop
id="stop2703"
offset="0.0000000"
style="stop-color:#585956;stop-opacity:1.0000000;" />
<stop
id="stop2705"
offset="1.0000000"
style="stop-color:#bbbeb8;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient2691">
<stop
id="stop2693"
offset="0.0000000"
style="stop-color:#868686;stop-opacity:1.0000000;" />
<stop
id="stop2695"
offset="1.0000000"
style="stop-color:#e9e9e9;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient2683"
inkscape:collect="always">
<stop
id="stop2685"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop2687"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient2675">
<stop
id="stop2677"
offset="0.0000000"
style="stop-color:#5b5b97;stop-opacity:1.0000000;" />
<stop
id="stop2679"
offset="1.0000000"
style="stop-color:#1b1b43;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient2667">
<stop
id="stop2669"
offset="0.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop2671"
offset="1.0000000"
style="stop-color:#fcfcff;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient2635"
inkscape:collect="always">
<stop
id="stop2637"
offset="0"
style="stop-color:#f9fff5;stop-opacity:1;" />
<stop
id="stop2639"
offset="1"
style="stop-color:#f9fff5;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient2623">
<stop
id="stop2625"
offset="0.0000000"
style="stop-color:#dfdfde;stop-opacity:1.0000000;" />
<stop
id="stop2627"
offset="1.0000000"
style="stop-color:#9d9f9a;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2454">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop2456" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop2458" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2415">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2417" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2419" />
</linearGradient>
<linearGradient
id="linearGradient2379">
<stop
style="stop-color:#1a4876;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2381" />
<stop
style="stop-color:#3f54a3;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop2383" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2328">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2330" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2332" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2307">
<stop
style="stop-color:#5a7aa4;stop-opacity:1;"
offset="0"
id="stop2309" />
<stop
style="stop-color:#5a7aa4;stop-opacity:0;"
offset="1"
id="stop2311" />
</linearGradient>
<linearGradient
id="linearGradient2253">
<stop
style="stop-color:#8f8f8f;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2255" />
<stop
style="stop-color:#494949;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop2257" />
</linearGradient>
<linearGradient
id="linearGradient2245">
<stop
style="stop-color:#dde1d9;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2247" />
<stop
style="stop-color:#cacdc6;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop2249" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2245"
id="linearGradient2251"
gradientTransform="matrix(1.129863,0.000000,0.000000,0.885063,-1.625000,-1.304372)"
x1="8.6116238"
y1="7.2293582"
x2="34.784473"
y2="33.339787"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2307"
id="linearGradient2313"
gradientTransform="matrix(1.208393,0.000000,0.000000,0.984410,-0.789284,-0.503380)"
x1="16.851954"
y1="9.3235140"
x2="24.418941"
y2="53.734985"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2328"
id="linearGradient2334"
gradientTransform="matrix(1.289166,0.000000,0.000000,0.922731,-0.789284,-0.503380)"
x1="16.119127"
y1="10.842293"
x2="27.289009"
y2="39.031910"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2415"
id="linearGradient2421"
gradientTransform="matrix(1.108069,0.000000,0.000000,0.902471,1.000000,1.000000)"
x1="17.698339"
y1="13.004725"
x2="34.974548"
y2="55.200756"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2379"
id="linearGradient2445"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.027870,0.000000,0.000000,0.822296,1.523986,1.001198)"
x1="21.356108"
y1="30.078255"
x2="19.994572"
y2="-1.3221773" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2454"
id="radialGradient2460"
gradientTransform="scale(1.925808,0.519262)"
cx="12.575710"
cy="67.501709"
fx="12.575710"
fy="67.501709"
r="8.7662794"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2454"
id="radialGradient2464"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(1.925808,0.519262)"
cx="12.575710"
cy="67.501709"
fx="12.575710"
fy="67.501709"
r="8.7662794" />
<linearGradient
y2="92.570930"
x2="10.728384"
y1="84.029198"
x1="10.728384"
gradientTransform="scale(1.983556,0.504145)"
gradientUnits="userSpaceOnUse"
id="linearGradient2653"
xlink:href="#linearGradient2623"
inkscape:collect="always" />
<linearGradient
y2="74.098007"
x2="8.6485014"
y1="101.28460"
x1="13.628710"
gradientTransform="scale(2.143634,0.466498)"
gradientUnits="userSpaceOnUse"
id="linearGradient2655"
xlink:href="#linearGradient2635"
inkscape:collect="always" />
<radialGradient
r="8.7662794"
fy="67.501709"
fx="12.575710"
cy="67.501709"
cx="12.575710"
gradientTransform="scale(1.925808,0.519262)"
gradientUnits="userSpaceOnUse"
id="radialGradient2659"
xlink:href="#linearGradient2454"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="26.729263"
x2="17.199417"
y1="1.6537577"
x1="11.492236"
gradientTransform="matrix(1.238977,0.000000,0.000000,0.895955,0.590553,-1.331524)"
id="linearGradient2673"
xlink:href="#linearGradient2667"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="8.8666229"
x2="16.315819"
y1="32.622238"
x1="19.150396"
gradientTransform="matrix(1.174139,0.000000,0.000000,0.945431,0.721825,-1.331524)"
id="linearGradient2681"
xlink:href="#linearGradient2675"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="162.45061"
x2="3.7069974"
y1="171.29134"
x1="3.7069976"
gradientTransform="matrix(5.705159,0.000000,0.000000,0.175280,1.000000,-0.679373)"
id="linearGradient2689"
xlink:href="#linearGradient2683"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="64.892525"
x2="12.127711"
y1="53.535141"
x1="12.206709"
gradientTransform="scale(1.816345,0.550556)"
id="linearGradient2707"
xlink:href="#linearGradient2701"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="3.8451097"
x2="35.520542"
y1="3.9384086"
x1="34.300991"
id="linearGradient2717"
xlink:href="#linearGradient2711"
inkscape:collect="always" />
<linearGradient
y2="3.8451097"
x2="35.520542"
y1="3.9384086"
x1="34.300991"
gradientUnits="userSpaceOnUse"
id="linearGradient2721"
xlink:href="#linearGradient2711"
inkscape:collect="always" />
<linearGradient
y2="3.8451097"
x2="35.520542"
y1="3.9384086"
x1="34.300991"
gradientUnits="userSpaceOnUse"
id="linearGradient2725"
xlink:href="#linearGradient2711"
inkscape:collect="always" />
<linearGradient
y2="3.8451097"
x2="35.520542"
y1="3.9384086"
x1="34.300991"
gradientUnits="userSpaceOnUse"
id="linearGradient2729"
xlink:href="#linearGradient2711"
inkscape:collect="always" />
<linearGradient
y2="3.8451097"
x2="35.520542"
y1="3.9384086"
x1="34.300991"
gradientUnits="userSpaceOnUse"
id="linearGradient2733"
xlink:href="#linearGradient2711"
inkscape:collect="always" />
<linearGradient
y2="74.098007"
x2="8.6485014"
y1="101.28460"
x1="13.628710"
gradientTransform="matrix(2.143634,0.000000,0.000000,0.466498,1.000000,-0.508826)"
gradientUnits="userSpaceOnUse"
id="linearGradient2741"
xlink:href="#linearGradient2635"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="100.20015"
x2="8.1134233"
y1="88.509071"
x1="8.1134243"
gradientTransform="scale(2.309851,0.432928)"
id="linearGradient2758"
xlink:href="#linearGradient2752"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="31.246054"
x2="32.536823"
y1="5.3817744"
x1="10.390738"
gradientTransform="scale(1.104397,0.905471)"
id="linearGradient2979"
xlink:href="#linearGradient2253"
inkscape:collect="always" />
<linearGradient
y2="52.536461"
x2="18.176752"
y1="48.643234"
x1="18.316999"
gradientTransform="scale(1.129863,0.885063)"
gradientUnits="userSpaceOnUse"
id="linearGradient2981"
xlink:href="#linearGradient2245"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="44.878883"
x2="-23.885700"
y1="49.953003"
x1="-23.885700"
gradientTransform="scale(1.492875,0.669848)"
id="linearGradient2991"
xlink:href="#linearGradient2985"
inkscape:collect="always" />
<linearGradient
y2="100.20015"
x2="8.1134233"
y1="88.509071"
x1="8.1134243"
gradientTransform="scale(2.309851,0.432928)"
gradientUnits="userSpaceOnUse"
id="linearGradient1409"
xlink:href="#linearGradient2752"
inkscape:collect="always" />
<linearGradient
y2="100.20015"
x2="8.1134233"
y1="88.509071"
x1="8.1134243"
gradientTransform="scale(2.309851,0.432928)"
gradientUnits="userSpaceOnUse"
id="linearGradient1411"
xlink:href="#linearGradient2752"
inkscape:collect="always" />
<linearGradient
y2="31.246054"
x2="32.536823"
y1="5.3817744"
x1="10.390738"
gradientTransform="scale(1.104397,0.905471)"
gradientUnits="userSpaceOnUse"
id="linearGradient1413"
xlink:href="#linearGradient2253"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.12156863"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="75.353821"
inkscape:cy="12.176086"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="770"
inkscape:window-height="576"
inkscape:window-x="402"
inkscape:window-y="25"
inkscape:showpageshadow="false" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Computer</dc:title>
<dc:date>2005-03-08</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>workstation</rdf:li>
<rdf:li>computer</rdf:li>
<rdf:li>node</rdf:li>
<rdf:li>client</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:source>http://jimmac.musichall.cz/</dc:source>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
sodipodi:type="arc"
style="color:#000000;fill:url(#radialGradient2460);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.70063692;visibility:visible;display:inline;overflow:visible"
id="path2452"
sodipodi:cx="24.218407"
sodipodi:cy="35.051105"
sodipodi:rx="16.882174"
sodipodi:ry="4.5520000"
d="M 41.100580 35.051105 A 16.882174 4.5520000 0 1 1 7.3362331,35.051105 A 16.882174 4.5520000 0 1 1 41.100580 35.051105 z"
transform="matrix(1.000000,0.000000,0.000000,1.368932,-1.978553,-13.61713)" />
<path
sodipodi:type="arc"
style="color:#000000;fill:#adb0aa;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#4b4d4a;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
id="path2407"
sodipodi:cx="-35.658386"
sodipodi:cy="29.716238"
sodipodi:rx="9.3944187"
sodipodi:ry="3.9395950"
d="M -26.263968 29.716238 A 9.3944187 3.9395950 0 1 1 -45.052805,29.716238 A 9.3944187 3.9395950 0 1 1 -26.263968 29.716238 z"
transform="translate(57.53339,3.203427)" />
<path
transform="matrix(0.940273,0.000000,0.000000,0.940273,55.40361,4.271194)"
d="M -26.263968 29.716238 A 9.3944187 3.9395950 0 1 1 -45.052805,29.716238 A 9.3944187 3.9395950 0 1 1 -26.263968 29.716238 z"
sodipodi:ry="3.9395950"
sodipodi:rx="9.3944187"
sodipodi:cy="29.716238"
sodipodi:cx="-35.658386"
id="path1825"
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#7b7f7a;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2991);stroke-width:0.68065339;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
id="path2983"
sodipodi:cx="-35.658386"
sodipodi:cy="29.716238"
sodipodi:rx="9.3944187"
sodipodi:ry="3.9395950"
d="M -26.263968 29.716238 A 9.3944187 3.9395950 0 1 1 -45.052805,29.716238 A 9.3944187 3.9395950 0 1 1 -26.263968 29.716238 z"
transform="matrix(0.940273,0.000000,0.000000,0.940273,55.40361,3.521194)" />
<path
sodipodi:nodetypes="ccccccccccccccccc"
style="fill:#d0d0d0;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#979797;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
d="M 25.687500,28.766243 L 25.625000,29.766243 C 25.625000,29.766243 29.949108,33.365409 34.625000,33.968750 C 36.962946,34.270420 39.378675,34.671162 41.375000,35.156250 C 43.371325,35.641338 44.963356,36.275856 45.500000,36.812500 C 45.810411,37.122911 45.951063,37.386139 46.000000,37.593750 C 46.048937,37.801361 46.038217,37.948565 45.906250,38.156250 C 45.642317,38.571620 44.826393,39.123902 43.437500,39.562500 C 40.659715,40.439695 35.717076,41.000000 28.875000,41.000000 L 28.875000,42.000000 C 35.770998,42.000000 40.738665,41.472329 43.718750,40.531250 C 45.208792,40.060710 46.243692,39.515563 46.750000,38.718750 C 47.003154,38.320344 47.107321,37.830301 47.000000,37.375000 C 46.892679,36.919699 46.615445,36.490445 46.218750,36.093750 C 45.341180,35.216180 43.681912,34.687310 41.625000,34.187500 C 39.568088,33.687690 37.109264,33.273171 34.750000,32.968750 C 30.031473,32.359908 25.687500,28.766243 25.687500,28.766243 z "
id="path2411" />
<path
transform="matrix(1.000000,0.000000,0.000000,1.368932,-1.978553,-19.02126)"
d="M 41.100580 35.051105 A 16.882174 4.5520000 0 1 1 7.3362331,35.051105 A 16.882174 4.5520000 0 1 1 41.100580 35.051105 z"
sodipodi:ry="4.5520000"
sodipodi:rx="16.882174"
sodipodi:cy="35.051105"
sodipodi:cx="24.218407"
id="path2462"
style="color:#000000;fill:url(#radialGradient2464);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.70063692;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<rect
y="30.703611"
x="17.472397"
height="2.7400389"
width="9.0396729"
id="rect2699"
style="color:#000000;fill:url(#linearGradient2707);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.60872948;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
<path
style="color:#000000;fill:url(#linearGradient2251);fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2979);stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
d="M 7.0809024,1.6956221 L 36.669097,1.6956221 C 37.580439,1.6956221 38.293244,2.2791039 38.335849,3.0972091 L 39.667893,28.675323 C 39.726102,29.793058 38.766837,30.695628 37.647588,30.695628 L 6.1024120,30.695628 C 4.9831629,30.695628 4.0238980,29.793058 4.0821068,28.675323 L 5.4141506,3.0972091 C 5.4544343,2.3236745 5.9616533,1.6956221 7.0809024,1.6956221 z "
id="rect2404"
sodipodi:nodetypes="cssssssss" />
<path
sodipodi:nodetypes="ccccc"
id="path2377"
d="M 8.4105348,4.3058272 L 7.1683398,26.351144 L 34.818729,26.351144 L 33.483712,4.3992558 L 8.4105348,4.3058272 z "
style="fill:url(#linearGradient2681);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000079;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" />
<path
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:url(#linearGradient2689);stroke-width:0.99618119;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:0.24840762"
d="M 6.1774331,28.735789 L 37.605910,28.735789"
id="path2393" />
<path
sodipodi:nodetypes="cssssssss"
id="path2397"
d="M 6.9145985,2.7063396 L 36.760101,2.6685383 C 37.043798,2.6681790 37.319403,2.9057881 37.342206,3.3210821 L 38.704098,28.124330 C 38.762137,29.181361 38.164349,29.910201 37.105727,29.910201 L 6.5817583,29.910201 C 5.5231355,29.910201 4.9887439,29.181410 5.0458869,28.124330 L 6.3699773,3.6301633 C 6.4086732,2.9143326 6.5363627,2.7068187 6.9145985,2.7063396 z "
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2421);stroke-width:0.99999964;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.70063692;visibility:visible;display:inline;overflow:visible" />
<path
sodipodi:nodetypes="ccccc"
style="opacity:0.53142858;fill:url(#linearGradient2673);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
d="M 8.7115364,4.7463626 L 7.9090069,22.616693 C 18.953645,20.216063 19.330470,12.124494 33.063039,9.4699426 L 32.901567,4.8124267 L 8.7115364,4.7463626 z "
id="path2443" />
<path
transform="matrix(1.264398,0.000000,0.000000,1.291262,-6.216332,-4.000423)"
d="M 41.100580 35.051105 A 16.882174 4.5520000 0 1 1 7.3362331,35.051105 A 16.882174 4.5520000 0 1 1 41.100580 35.051105 z"
sodipodi:ry="4.5520000"
sodipodi:rx="16.882174"
sodipodi:cy="35.051105"
sodipodi:cx="24.218407"
id="path2657"
style="color:#000000;fill:url(#radialGradient2659);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.70063692;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
sodipodi:nodetypes="cssssssss"
id="path2409"
d="M 6.4621839,36.817452 L 37.464590,36.817452 C 38.583839,36.817452 38.441945,37.088890 38.556817,37.430298 L 41.391463,45.855108 C 41.506335,46.196517 41.418485,46.467954 40.299236,46.467954 L 3.6275382,46.467954 C 2.5082891,46.467954 2.4204387,46.196517 2.5353107,45.855108 L 5.3699564,37.430298 C 5.4848284,37.088889 5.3429348,36.817452 6.4621839,36.817452 z "
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2981);fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient1413);stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
<path
sodipodi:nodetypes="ccccccccc"
id="path2611"
d="M 6.3916892,38.829113 L 4.6239223,43.955638 L 10.104000,43.955638 L 10.634330,41.922706 L 25.483572,41.922706 L 26.033251,43.997820 L 32.201086,43.997820 L 30.521708,38.829113 L 6.3916892,38.829113 z "
style="fill:#7a7d77;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
id="path2613"
d="M 11.076272,42.276260 L 10.634330,43.955639 L 25.395184,43.955639 L 24.953242,42.187872 L 11.076272,42.276260 z "
style="fill:#777874;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
style="color:#000000;fill:#777a75;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
d="M 37.592776,38.829114 L 39.272155,43.867250 L 33.792077,43.778861 L 32.289475,38.917502 L 37.592776,38.829114 z "
id="path2619" />
<path
id="path2615"
d="M 37.592776,38.298786 L 39.272155,43.336922 L 33.792077,43.248533 L 32.289475,38.387174 L 37.592776,38.298786 z "
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2758);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
<path
style="fill:url(#linearGradient1411);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
d="M 6.3916892,38.210397 L 4.6239223,43.336922 L 10.104000,43.336922 L 10.634330,41.303990 L 25.483572,41.303990 L 26.033251,43.379104 L 32.201086,43.379104 L 30.521708,38.210397 L 6.3916892,38.210397 z "
id="path2617"
sodipodi:nodetypes="ccccccccc" />
<path
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient1409);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
d="M 11.076272,41.745932 L 10.634330,43.425311 L 25.395184,43.425311 L 24.953242,41.657544 L 11.076272,41.745932 z "
id="path2621" />
<path
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2741);stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
d="M 6.1278189,37.578116 L 37.953634,37.578116 L 40.590813,45.670679 L 3.3297429,45.670679 L 6.1278189,37.578116 z "
id="path2631"
sodipodi:nodetypes="ccccc" />
<path
transform="matrix(1.331237,0.000000,0.000000,0.658449,-10.41933,2.853866)"
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
sodipodi:ry="0.83968931"
sodipodi:rx="0.83968931"
sodipodi:cy="3.9384086"
sodipodi:cx="34.780815"
id="path2709"
style="color:#000000;fill:url(#linearGradient2717);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
style="color:#000000;fill:url(#linearGradient2721);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
id="path2719"
sodipodi:cx="34.780815"
sodipodi:cy="3.9384086"
sodipodi:rx="0.83968931"
sodipodi:ry="0.83968931"
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
transform="matrix(1.331237,0.000000,0.000000,0.658449,-10.30573,4.959651)" />
<path
transform="matrix(1.331237,0.000000,0.000000,0.658449,-10.19213,6.959651)"
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
sodipodi:ry="0.83968931"
sodipodi:rx="0.83968931"
sodipodi:cy="3.9384086"
sodipodi:cx="34.780815"
id="path2723"
style="color:#000000;fill:url(#linearGradient2725);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
style="color:#000000;fill:url(#linearGradient2729);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
id="path2727"
sodipodi:cx="34.780815"
sodipodi:cy="3.9384086"
sodipodi:rx="0.83968931"
sodipodi:ry="0.83968931"
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
transform="matrix(1.331237,0.000000,0.000000,0.658449,-10.07853,8.959651)" />
<path
transform="matrix(1.331237,0.000000,0.000000,0.658449,-9.964930,10.95965)"
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
sodipodi:ry="0.83968931"
sodipodi:rx="0.83968931"
sodipodi:cy="3.9384086"
sodipodi:cx="34.780815"
id="path2731"
style="color:#000000;fill:url(#linearGradient2733);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
id="text2735"
d="M 20.000000,27.317666 L 20.281716,27.317666 C 20.365481,27.317667 20.429701,27.336330 20.474376,27.373656 C 20.519345,27.410690 20.541829,27.463594 20.541830,27.532370 C 20.541829,27.601440 20.519345,27.654638 20.474376,27.691965 C 20.429701,27.728998 20.365481,27.747515 20.281716,27.747515 L 20.169735,27.747515 L 20.169735,27.975885 L 20.000000,27.975885 L 20.000000,27.317666 M 20.169735,27.440669 L 20.169735,27.624512 L 20.263640,27.624512 C 20.296558,27.624512 20.321982,27.616576 20.339911,27.600705 C 20.357839,27.584540 20.366804,27.561762 20.366804,27.532370 C 20.366804,27.502979 20.357839,27.480348 20.339911,27.464476 C 20.321982,27.448605 20.296558,27.440669 20.263640,27.440669 L 20.169735,27.440669 M 20.961979,27.428765 C 20.910250,27.428766 20.870131,27.447870 20.841621,27.486078 C 20.813112,27.524288 20.798857,27.578074 20.798857,27.647437 C 20.798857,27.716507 20.813112,27.770146 20.841621,27.808355 C 20.870131,27.846564 20.910250,27.865668 20.961979,27.865668 C 21.014001,27.865668 21.054267,27.846564 21.082778,27.808355 C 21.111287,27.770146 21.125541,27.716507 21.125542,27.647437 C 21.125541,27.578074 21.111287,27.524288 21.082778,27.486078 C 21.054267,27.447870 21.014001,27.428766 20.961979,27.428765 M 20.961979,27.305762 C 21.067787,27.305763 21.150671,27.336036 21.210630,27.396582 C 21.270588,27.457128 21.300567,27.540747 21.300568,27.647437 C 21.300567,27.753834 21.270588,27.837305 21.210630,27.897851 C 21.150671,27.958398 21.067787,27.988671 20.961979,27.988671 C 20.856464,27.988671 20.773580,27.958398 20.713328,27.897851 C 20.653370,27.837305 20.623391,27.753834 20.623391,27.647437 C 20.623391,27.540747 20.653370,27.457128 20.713328,27.396582 C 20.773580,27.336036 20.856464,27.305763 20.961979,27.305762 M 21.428420,27.317666 L 21.617994,27.317666 L 21.857387,27.769117 L 21.857387,27.317666 L 22.018305,27.317666 L 22.018305,27.975885 L 21.828730,27.975885 L 21.589338,27.524434 L 21.589338,27.975885 L 21.428420,27.975885 L 21.428420,27.317666 M 22.091489,27.317666 L 22.277095,27.317666 L 22.426991,27.552209 L 22.576887,27.317666 L 22.762935,27.317666 L 22.512079,27.698578 L 22.512079,27.975885 L 22.342344,27.975885 L 22.342344,27.698578 L 22.091489,27.317666"
style="font-size:0.90290260;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;writing-mode:lr-tb;text-anchor:start;fill:#4a4a4a;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 36 KiB

View file

@ -0,0 +1,316 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48px"
height="48px"
id="svg1306"
sodipodi:version="0.32"
inkscape:version="0.43+devel"
sodipodi:docbase="/home/garrett/Source/tango-icon-theme/scalable/status"
sodipodi:docname="dialog-error.svg">
<defs
id="defs1308">
<linearGradient
id="linearGradient3957">
<stop
style="stop-color:#fffeff;stop-opacity:0.33333334;"
offset="0"
id="stop3959" />
<stop
style="stop-color:#fffeff;stop-opacity:0.21568628;"
offset="1"
id="stop3961" />
</linearGradient>
<linearGradient
id="linearGradient2536">
<stop
style="stop-color:#a40000;stop-opacity:1;"
offset="0"
id="stop2538" />
<stop
style="stop-color:#ff1717;stop-opacity:1;"
offset="1"
id="stop2540" />
</linearGradient>
<linearGradient
id="linearGradient2479">
<stop
style="stop-color:#ffe69b;stop-opacity:1;"
offset="0"
id="stop2481" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop2483" />
</linearGradient>
<linearGradient
id="linearGradient4126"
inkscape:collect="always">
<stop
id="stop4128"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop4130"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4126"
id="radialGradient2169"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.500000,1.899196e-14,20.00000)"
cx="23.857143"
cy="40.000000"
fx="23.857143"
fy="40.000000"
r="17.142857" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2479"
id="linearGradient2485"
x1="43.93581"
y1="53.835983"
x2="20.064686"
y2="-8.5626707"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2536"
id="linearGradient2542"
x1="36.917976"
y1="66.288063"
x2="19.071495"
y2="5.5410109"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2536"
id="linearGradient3046"
gradientUnits="userSpaceOnUse"
x1="36.917976"
y1="66.288063"
x2="19.071495"
y2="5.5410109" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2479"
id="linearGradient3048"
gradientUnits="userSpaceOnUse"
x1="43.93581"
y1="53.835983"
x2="20.064686"
y2="-8.5626707" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2536"
id="linearGradient3064"
gradientUnits="userSpaceOnUse"
x1="36.917976"
y1="66.288063"
x2="19.071495"
y2="5.5410109" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2479"
id="linearGradient3066"
gradientUnits="userSpaceOnUse"
x1="43.93581"
y1="53.835983"
x2="20.064686"
y2="-8.5626707" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3957"
id="linearGradient3963"
x1="21.993773"
y1="33.955299"
x2="20.917078"
y2="15.814602"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4126"
id="radialGradient3976"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.5,1.893048e-14,20)"
cx="23.857143"
cy="40.000000"
fx="23.857143"
fy="40.000000"
r="17.142857" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2536"
id="linearGradient3978"
gradientUnits="userSpaceOnUse"
x1="36.917976"
y1="66.288063"
x2="19.071495"
y2="5.5410109" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2479"
id="linearGradient3980"
gradientUnits="userSpaceOnUse"
x1="43.93581"
y1="53.835983"
x2="20.064686"
y2="-8.5626707" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3957"
id="linearGradient3982"
gradientUnits="userSpaceOnUse"
x1="21.993773"
y1="33.955299"
x2="20.917078"
y2="15.814602" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.21568627"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="27.043297"
inkscape:cy="20.463852"
inkscape:current-layer="layer2"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="925"
inkscape:window-height="846"
inkscape:window-x="234"
inkscape:window-y="52"
inkscape:showpageshadow="false"
fill="#ef2929"
gridempspacing="4" />
<metadata
id="metadata1311">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Rodney Dawes</dc:title>
</cc:Agent>
</dc:creator>
<dc:contributor>
<cc:Agent>
<dc:title>Jakub Steiner, Garrett LeSage</dc:title>
</cc:Agent>
</dc:contributor>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:title>Dialog Error</dc:title>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Shadow">
<path
inkscape:r_cy="true"
inkscape:r_cx="true"
transform="matrix(1.070555,0,0,0.525,-0.892755,22.5)"
d="M 41 40 A 17.142857 8.5714283 0 1 1 6.7142868,40 A 17.142857 8.5714283 0 1 1 41 40 z"
sodipodi:ry="8.5714283"
sodipodi:rx="17.142857"
sodipodi:cy="40"
sodipodi:cx="23.857143"
id="path6548"
style="opacity:0.6;color:#000000;fill:url(#radialGradient3976);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
sodipodi:type="arc" />
</g>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="g4006">
<path
transform="matrix(0.920488,0,0,0.920488,2.368532,0.97408)"
d="M 46.857143 23.928572 A 23.357143 23.357143 0 1 1 0.1428566,23.928572 A 23.357143 23.357143 0 1 1 46.857143 23.928572 z"
sodipodi:ry="23.357143"
sodipodi:rx="23.357143"
sodipodi:cy="23.928572"
sodipodi:cx="23.5"
id="path1314"
style="fill:url(#linearGradient3978);fill-opacity:1;fill-rule:nonzero;stroke:#b20000;stroke-width:1.08638;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="arc"
inkscape:r_cx="true"
inkscape:r_cy="true" />
<path
transform="matrix(0.856093,0,0,0.856093,1.818275,0.197769)"
d="M 49.901535 26.635273 A 23.991123 23.991123 0 1 1 1.9192886,26.635273 A 23.991123 23.991123 0 1 1 49.901535 26.635273 z"
sodipodi:ry="23.991123"
sodipodi:rx="23.991123"
sodipodi:cy="26.635273"
sodipodi:cx="25.910412"
id="path3560"
style="opacity:0.34659089;fill:#cc0000;fill-opacity:0;stroke:url(#linearGradient3980);stroke-width:1.16809607;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="arc"
inkscape:r_cx="true"
inkscape:r_cy="true" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Error Box">
<rect
inkscape:r_cy="true"
inkscape:r_cx="true"
style="fill:#efefef;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73876643;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8627451"
id="rect2070"
width="27.836435"
height="7.1735945"
x="10.078821"
y="19.164932"
transform="matrix(1.005876,0,0,1.115201,-0.138045,-2.372708)" />
</g>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Glossy Shine">
<path
transform="matrix(1.002994,0,0,1.002994,-7.185874e-2,1.968356e-2)"
sodipodi:nodetypes="czssc"
id="path3955"
d="M 43.370686,21.715486 C 43.370686,32.546102 33.016357,15.449178 24.695948,22.101874 C 16.569626,28.599385 4.0989837,34.292422 4.0989837,23.461806 C 4.0989837,12.377753 12.79438,2.0948032 23.625,2.0948032 C 34.455619,2.0948032 43.370686,10.884868 43.370686,21.715486 z "
style="fill:url(#linearGradient3982);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
inkscape:r_cx="true"
inkscape:r_cy="true" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 44 KiB

View file

@ -0,0 +1,290 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48px"
height="48px"
id="svg1377"
sodipodi:version="0.32"
inkscape:version="0.43+devel"
sodipodi:docbase="/home/garrett/Source/tango-icon-theme/scalable/status"
sodipodi:docname="dialog-warning.svg">
<defs
id="defs1379">
<linearGradient
y2="56.0523"
x2="47.3197"
y1="11.1133"
x1="4.1914"
gradientUnits="userSpaceOnUse"
id="aigrd1">
<stop
id="stop6490"
style="stop-color:#D4D4D4"
offset="0" />
<stop
id="stop6492"
style="stop-color:#E2E2E2"
offset="0.3982" />
<stop
id="stop6494"
style="stop-color:#FFFFFF"
offset="1" />
</linearGradient>
<linearGradient
y2="56.0523"
x2="47.3197"
y1="11.1133"
x1="4.1914"
gradientUnits="userSpaceOnUse"
id="linearGradient7451"
xlink:href="#aigrd1"
inkscape:collect="always" />
<linearGradient
id="linearGradient4126"
inkscape:collect="always">
<stop
id="stop4128"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop4130"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<radialGradient
r="17.142857"
fy="40.000000"
fx="23.857143"
cy="40.000000"
cx="23.857143"
gradientTransform="matrix(1,0,0,0.5,2.139286e-14,20)"
gradientUnits="userSpaceOnUse"
id="radialGradient7449"
xlink:href="#linearGradient4126"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6525"
id="linearGradient5250"
x1="8.5469341"
y1="30.281681"
x2="30.85088"
y2="48.301884"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.899009,0,0,0.934235,1.875108,1.193645)" />
<linearGradient
inkscape:collect="always"
xlink:href="#aigrd1"
id="linearGradient3922"
gradientUnits="userSpaceOnUse"
x1="4.1914"
y1="11.1133"
x2="47.3197"
y2="56.0523" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6525"
id="linearGradient3924"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.899009,0,0,0.934235,1.875108,1.193645)"
x1="8.5469341"
y1="30.281681"
x2="30.85088"
y2="48.301884" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6525"
id="linearGradient3933"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.899009,0,0,0.934235,1.875108,1.193645)"
x1="8.5469341"
y1="30.281681"
x2="30.85088"
y2="48.301884" />
<linearGradient
inkscape:collect="always"
xlink:href="#aigrd1"
id="linearGradient3935"
gradientUnits="userSpaceOnUse"
x1="4.1914"
y1="11.1133"
x2="47.3197"
y2="56.0523" />
<linearGradient
inkscape:collect="always"
xlink:href="#aigrd1"
id="linearGradient3946"
gradientUnits="userSpaceOnUse"
x1="4.1914"
y1="11.1133"
x2="47.3197"
y2="56.0523" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6525"
id="linearGradient3948"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.899009,0,0,0.934235,1.875108,1.193645)"
x1="8.5469341"
y1="30.281681"
x2="30.85088"
y2="48.301884" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="14.757891"
inkscape:cx="24"
inkscape:cy="24"
inkscape:current-layer="g7435"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1105"
inkscape:window-height="1084"
inkscape:window-x="157"
inkscape:window-y="16"
gridempspacing="4" />
<metadata
id="metadata1382">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Dialog Warning</dc:title>
<dc:date>2005-10-14</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Andreas Nilsson</dc:title>
</cc:Agent>
</dc:creator>
<dc:contributor>
<cc:Agent>
<dc:title>Jakub Steiner, Garrett LeSage</dc:title>
</cc:Agent>
</dc:contributor>
<dc:subject>
<rdf:Bag>
<rdf:li>dialog</rdf:li>
<rdf:li>warning</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
transform="matrix(1.566667,0.000000,0.000000,1.566667,-8.925566,-23.94764)"
id="g7435">
<path
transform="matrix(0.817145,0,0,0.392908,1.555909,25.27761)"
d="M 41 40 A 17.142857 8.5714283 0 1 1 6.7142868,40 A 17.142857 8.5714283 0 1 1 41 40 z"
sodipodi:ry="8.5714283"
sodipodi:rx="17.142857"
sodipodi:cy="40"
sodipodi:cx="23.857143"
id="path6548"
style="opacity:0.5;color:#000000;fill:url(#radialGradient7449);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
sodipodi:type="arc"
inkscape:r_cx="true"
inkscape:r_cy="true" />
<g
id="g3937"
transform="matrix(1,0,4.537846e-3,1,-0.138907,-1.394718e-15)"
inkscape:r_cx="true"
inkscape:r_cy="true">
<path
inkscape:r_cy="true"
inkscape:r_cx="true"
transform="matrix(1,0,-8.726683e-3,1,0.328074,1.276596)"
id="path6485"
d="M 33.282781,38.644744 L 22.407791,18.394765 C 22.095292,17.832266 21.532792,17.519767 20.907793,17.519767 C 20.282793,17.519767 19.720294,17.894765 19.407795,18.457265 L 8.7828048,38.707245 C 8.5328048,39.207244 8.5328048,39.894744 8.8453048,40.394743 C 9.1578038,40.894743 9.6578038,41.144742 10.282804,41.144742 L 31.782782,41.144742 C 32.407781,41.144742 32.97028,40.832243 33.220281,40.332243 C 33.53278,39.832243 33.53278,39.207244 33.282781,38.644744 z "
style="fill:#cc0000;fill-rule:nonzero;stroke:#9f0000;stroke-width:0.6382978;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
inkscape:r_cy="true"
inkscape:r_cx="true"
id="g6487"
transform="matrix(0.625,0,-5.534934e-3,0.634254,6.164053,15.76055)"
style="fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4">
<linearGradient
y2="56.052299"
x2="47.319698"
y1="11.1133"
x1="4.1914001"
gradientUnits="userSpaceOnUse"
id="linearGradient6525">
<stop
id="stop6529"
style="stop-color:#ffffff;stop-opacity:1;"
offset="0" />
<stop
id="stop6531"
style="stop-color:#ffffff;stop-opacity:0.34020618;"
offset="1" />
</linearGradient>
<path
inkscape:r_cy="true"
inkscape:r_cx="true"
id="path6496"
d="M 9.5,37.6 C 9.2,38.1 9.5,38.5 10,38.5 L 38.2,38.5 C 38.7,38.5 39,38.1 38.7,37.6 L 24.4,11 C 24.1,10.5 23.7,10.5 23.5,11 L 9.5,37.6 z "
style="fill:url(#linearGradient3946);stroke:none" />
</g>
<path
inkscape:r_cy="true"
inkscape:r_cx="true"
transform="matrix(1,0,-8.726683e-3,1,0.318277,1.276596)"
sodipodi:nodetypes="ccsccscccc"
id="path1325"
d="M 32.323106,38.183905 L 22.150271,19.265666 C 21.71698,18.45069 21.561698,18.189213 20.908406,18.189213 C 20.346525,18.189213 20.054127,18.57002 19.651305,19.339291 L 9.7489285,38.242296 C 9.1737649,39.303588 9.1128238,39.580228 9.3937644,40.047345 C 9.6747034,40.514462 10.032797,40.48902 11.356441,40.519491 L 30.974593,40.519491 C 32.206825,40.534726 32.483988,40.440837 32.70874,39.97372 C 32.989681,39.506602 32.867799,39.136 32.323106,38.183905 z "
style="opacity:0.5;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3948);stroke-width:0.63829792;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
style="fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4"
transform="matrix(0.555088,0,0,0.555052,7.749711,17.80196)"
id="g6498"
inkscape:r_cx="true"
inkscape:r_cy="true">
<path
style="stroke:none"
d="M 23.9,36.5 C 22.6,36.5 21.6,35.5 21.6,34.2 C 21.6,32.8 22.5,31.9 23.9,31.9 C 25.3,31.9 26.1,32.8 26.2,34.2 C 26.2,35.5 25.3,36.5 23.9,36.5 L 23.9,36.5 z M 22.5,30.6 L 21.9,19.1 L 25.9,19.1 L 25.3,30.6 L 22.4,30.6 L 22.5,30.6 z "
id="path6500"
inkscape:r_cx="true"
inkscape:r_cy="true" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -0,0 +1,444 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="drive-cdrom.svg"
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/devices"
inkscape:version="0.43+devel"
sodipodi:version="0.32"
id="svg2913"
height="48px"
width="48px"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs3">
<linearGradient
id="linearGradient2351"
inkscape:collect="always">
<stop
id="stop2353"
offset="0"
style="stop-color:#656565;stop-opacity:1;" />
<stop
id="stop2355"
offset="1"
style="stop-color:#656565;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient2345">
<stop
style="stop-color:#d9d9d9;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2347" />
<stop
style="stop-color:#eeeeee;stop-opacity:0;"
offset="1"
id="stop2349" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2329">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop2331" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop2333" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2315">
<stop
style="stop-color:#656565;stop-opacity:1;"
offset="0"
id="stop2317" />
<stop
style="stop-color:#656565;stop-opacity:0;"
offset="1"
id="stop2319" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2165">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop2167" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop2169" />
</linearGradient>
<linearGradient
id="aigrd1"
gradientUnits="userSpaceOnUse"
x1="14.9966"
y1="11.1885"
x2="32.511"
y2="34.3075">
<stop
offset="0"
style="stop-color:#EBEBEB"
id="stop3034" />
<stop
offset="0.5"
style="stop-color:#FFFFFF"
id="stop3036" />
<stop
offset="1"
style="stop-color:#EBEBEB"
id="stop3038" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient6036">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop6038" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop6040" />
</linearGradient>
<linearGradient
id="linearGradient4264"
inkscape:collect="always">
<stop
id="stop4266"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop4268"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4254"
inkscape:collect="always">
<stop
id="stop4256"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop4258"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4244">
<stop
id="stop4246"
offset="0.0000000"
style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
<stop
id="stop4248"
offset="1.0000000"
style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient4228">
<stop
id="stop4230"
offset="0.0000000"
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
<stop
id="stop4232"
offset="1.0000000"
style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="40.943935"
x2="36.183067"
y1="28.481176"
x1="7.6046205"
id="linearGradient4234"
xlink:href="#linearGradient4228"
inkscape:collect="always"
gradientTransform="translate(0.000000,-1.944537)" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,-6.821398)"
r="20.935817"
fy="2.9585190"
fx="15.571491"
cy="2.9585190"
cx="15.571491"
id="radialGradient4250"
xlink:href="#linearGradient4244"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="47.620636"
x2="44.096100"
y1="4.4331360"
x1="12.378357"
id="linearGradient4260"
xlink:href="#linearGradient4254"
inkscape:collect="always"
gradientTransform="translate(0.000000,-1.944537)" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651032,-5.289283e-16,9.455693)"
r="23.555494"
fy="27.096155"
fx="23.201941"
cy="27.096155"
cx="23.201941"
id="radialGradient4270"
xlink:href="#linearGradient4264"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#aigrd1"
id="linearGradient2155"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.952531,0.000000,0.000000,0.656725,1.345471,19.22026)"
x1="14.9966"
y1="11.1885"
x2="32.511"
y2="34.3075" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6036"
id="linearGradient2161"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.738933,0.000000,0.000000,0.509459,6.215767,21.99197)"
x1="10.501720"
y1="3.6100161"
x2="48.798885"
y2="54.698483" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2165"
id="radialGradient2171"
cx="24.218407"
cy="33.769478"
fx="24.218407"
fy="33.769478"
r="17.677670"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.695000,0.000000,10.29969)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2351"
id="linearGradient2321"
x1="24.306797"
y1="33.693432"
x2="24.306797"
y2="37.609333"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2329"
id="linearGradient2335"
x1="23.375000"
y1="28.433596"
x2="23.375000"
y2="32.938416"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2329"
id="linearGradient2337"
x1="23.375000"
y1="28.433596"
x2="23.375000"
y2="32.938416"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2315"
id="linearGradient2341"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.799429,-9.653736e-16,6.604619)"
x1="24.306797"
y1="32.790924"
x2="24.306797"
y2="34.201233" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2345"
id="linearGradient2343"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.800126,0.000000,0.000000,0.551649,4.725541,20.59938)"
x1="26.332899"
y1="34.172115"
x2="26.193645"
y2="21.987923" />
</defs>
<sodipodi:namedview
inkscape:window-y="74"
inkscape:window-x="294"
inkscape:window-height="752"
inkscape:window-width="810"
inkscape:document-units="px"
inkscape:grid-bbox="true"
showgrid="false"
inkscape:current-layer="layer2"
inkscape:cy="20.858772"
inkscape:cx="24.951242"
inkscape:zoom="11.313708"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="0.17254902"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:showpageshadow="false" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Drive - CD-ROM</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>cdrom</rdf:li>
<rdf:li>cd-rom</rdf:li>
<rdf:li>optical</rdf:li>
<rdf:li>drive</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:identifier />
<dc:source>http://jimmac.musichall.cz</dc:source>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="pix"
id="layer2"
inkscape:groupmode="layer">
<path
transform="matrix(1.052533,0.000000,0.000000,0.363113,-0.511757,24.92528)"
d="M 46.757435 27.096155 A 23.555494 15.335379 0 1 1 -0.35355377,27.096155 A 23.555494 15.335379 0 1 1 46.757435 27.096155 z"
sodipodi:ry="15.335379"
sodipodi:rx="23.555494"
sodipodi:cy="27.096155"
sodipodi:cx="23.201941"
id="path4262"
style="opacity:0.56000000;color:#000000;fill:url(#radialGradient4270);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
sodipodi:nodetypes="cccsccccccccc"
id="path4196"
d="M 11.285690,6.0180852 C 10.660690,6.0180852 10.254441,6.3082654 10.004442,6.8618382 C 10.004441,6.8618382 3.5356915,23.965402 3.5356915,23.965402 C 3.5356915,23.965402 3.2856915,24.636961 3.2856915,25.746652 C 3.2856915,25.746652 3.2856915,35.396620 3.2856915,35.396620 C 3.2856915,36.479233 3.9434770,37.021622 4.9419415,37.021620 L 43.504440,37.021620 C 44.489293,37.021620 45.098190,36.303440 45.098190,35.177870 L 45.098190,25.527902 C 45.098190,25.527902 45.204153,24.757479 45.004440,24.215402 L 38.285690,7.0180888 C 38.101165,6.5061820 37.648785,6.0299905 37.160690,6.0180852 L 11.285690,6.0180852 z "
style="stroke-opacity:1.0000000;stroke-dasharray:none;stroke-miterlimit:4.0000000;stroke-linejoin:round;stroke-linecap:round;stroke-width:2.0000000;stroke:#535353;fill-rule:evenodd;fill-opacity:1.0000000;fill:none" />
<path
sodipodi:type="arc"
style="opacity:0.56571429;color:#000000;fill:url(#radialGradient2171);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible"
id="path2163"
sodipodi:cx="24.218407"
sodipodi:cy="33.769478"
sodipodi:rx="17.677670"
sodipodi:ry="12.285980"
d="M 41.896076 33.769478 A 17.677670 12.285980 0 1 1 6.5407372,33.769478 A 17.677670 12.285980 0 1 1 41.896076 33.769478 z"
transform="translate(0.883883,1.260942e-6)" />
<path
sodipodi:nodetypes="ccccccccc"
id="path4170"
d="M 3.2735915,25.052276 L 4.0381936,24.360061 L 41.647883,24.422561 L 45.110290,24.739859 L 45.110290,35.178391 C 45.110290,36.303960 44.503272,37.021722 43.518419,37.021722 L 4.9354314,37.021722 C 3.9369667,37.021722 3.2735915,36.479671 3.2735915,35.397058 L 3.2735915,25.052276 z "
style="fill:url(#linearGradient4234);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
sodipodi:nodetypes="csccccccs"
id="path3093"
d="M 3.5490842,23.969868 C 2.8347985,25.434154 3.5484686,26.362725 4.5847985,26.362725 C 4.5847985,26.362725 43.584797,26.362725 43.584797,26.362725 C 44.703844,26.338915 45.430035,25.350820 45.013368,24.219867 L 38.299082,7.0091618 C 38.114558,6.4972550 37.644320,6.0210632 37.156225,6.0091582 L 11.299083,6.0091582 C 10.674083,6.0091582 10.263369,6.3127314 10.013370,6.8663042 C 10.013370,6.8663042 3.5490842,23.969868 3.5490842,23.969868 z "
style="fill:url(#radialGradient4250);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
sodipodi:nodetypes="cccccccc"
id="path4201"
d="M 44.796162,23.684152 C 44.859684,24.934126 44.382159,25.999992 43.474046,26.027902 C 43.474046,26.027902 5.3553296,26.027901 5.3553297,26.027902 C 4.0660978,26.027902 3.4875937,25.702955 3.2712790,25.159846 C 3.3630404,26.104178 4.0970964,26.809152 5.3553297,26.809152 C 5.3553296,26.809151 43.474046,26.809152 43.474046,26.809152 C 44.550053,26.776081 45.226851,25.385128 44.826210,23.814361 L 44.796162,23.684152 z "
style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
d="M 11.642515,6.4711801 C 11.040823,6.4711801 10.649724,6.7505387 10.409049,7.2834674 C 10.409048,7.2834674 3.9940341,23.874196 3.9940341,23.874196 C 3.9940341,23.874196 3.7533573,24.520711 3.7533573,25.589019 C 3.7533573,25.589019 3.7533573,34.879115 3.7533573,34.879115 C 3.7533573,36.233855 4.1974134,36.506014 5.3478414,36.506014 L 43.034746,36.506014 C 44.357872,36.506014 44.569062,36.189617 44.569062,34.668522 L 44.569062,25.378426 C 44.569062,25.378426 44.671072,24.636735 44.478807,24.114873 L 37.885616,7.3088910 C 37.707973,6.8160745 37.334964,6.4826414 36.865071,6.4711801 L 11.642515,6.4711801 z "
id="path4252"
sodipodi:nodetypes="cccsccccccccc" />
<g
id="g2142"
transform="matrix(0.933652,0.000000,0.000000,0.933652,1.612716,-0.367774)">
<rect
y="32.363384"
x="5.3414402"
height="3.8650389"
width="37.930714"
id="rect2151"
style="overflow:visible;display:inline;visibility:visible;stroke-opacity:0.42372879;stroke-dashoffset:0.0000000;stroke-dasharray:none;stroke-miterlimit:4.0000000;marker-end:none;marker-mid:none;marker-start:none;marker:none;stroke-linejoin:round;stroke-linecap:square;stroke-width:1.0000000;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient2321);color:#000000;opacity:1.0000000" />
<path
style="fill:url(#linearGradient2155);fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
d="M 7.9921136,31.810344 C 7.7171786,32.641366 7.5233636,33.513742 7.5233636,34.404094 C 7.5233626,40.774327 14.971312,45.872844 24.210863,45.872844 C 33.450413,45.872844 40.867114,40.774327 40.867114,34.404094 C 40.867114,33.517511 40.702291,32.638143 40.429614,31.810344 L 24.867113,31.810344 C 26.706930,32.055511 28.210863,33.069699 28.210863,34.404094 C 28.210863,35.914562 26.401684,37.154094 24.210863,37.154094 C 22.020041,37.154094 20.210863,35.914562 20.210863,34.404094 C 20.210864,33.069699 21.714796,32.055511 23.554613,31.810344 L 7.9921136,31.810344 z "
id="path3040" />
<path
style="stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke:#808080;fill-rule:nonzero;fill:url(#linearGradient2343)"
d="M 7.8358636,32.341594 C 7.6633096,33.007401 7.5233636,33.702881 7.5233636,34.404094 C 7.5233636,40.774327 14.971312,45.872844 24.210863,45.872844 C 33.450413,45.872844 40.867114,40.774327 40.867114,34.404094 C 40.867114,33.702881 40.727168,33.007401 40.554614,32.341594 L 7.8358636,32.341594 z "
id="path3049"
sodipodi:nodetypes="cccccc" />
<path
style="opacity:0.10999996;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
d="M 16.572139,31.835312 C 15.798652,32.755289 15.247183,33.294631 15.247183,34.422908 C 15.247182,37.895941 19.357577,40.629280 24.277804,40.629280 C 29.315180,40.629279 33.308425,37.815173 33.308425,34.422908 C 33.308425,33.278057 32.722182,32.749858 31.948602,31.835312 L 26.571647,31.835312 C 28.249533,32.378741 29.194088,33.072249 29.194088,34.422908 C 29.194089,36.280577 26.972214,37.805032 24.277804,37.805032 C 21.583392,37.805032 19.361520,36.280577 19.361520,34.422908 C 19.361520,33.071466 20.280853,32.378317 21.960294,31.835312 L 16.572139,31.835312 z "
id="path3051"
sodipodi:nodetypes="ccccccccccc" />
<path
style="stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke:none;fill-rule:nonzero;fill-opacity:0.41807911;fill:#ffffff"
d="M 18.573984,44.742880 L 22.362784,37.212044 C 21.485635,36.996354 20.814201,36.572930 20.390359,36.015734 L 10.011877,39.604017 C 11.761798,41.989464 14.806535,43.844478 18.573984,44.742880 z "
id="path4214" />
<path
style="opacity:0.54644811;fill:none;fill-rule:nonzero;stroke:url(#linearGradient2161);stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
d="M 8.9118137,32.267515 C 8.6630467,33.007387 8.5077732,33.947164 8.5077732,34.740917 C 8.5077732,40.331493 16.102156,44.813068 24.210871,44.813068 C 32.319587,44.813067 39.713147,40.331492 39.713147,34.740917 C 39.713146,33.946625 39.529342,33.007846 39.280247,32.267515 L 8.9118137,32.267515 z "
id="path5264"
sodipodi:nodetypes="cccccc" />
<rect
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2341);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible;font-family:Bitstream Vera Sans"
id="rect4963"
width="37.863773"
height="1.1911809"
x="5.3414402"
y="31.627470" />
</g>
<path
style="opacity:0.36000000;stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient2335)"
d="M 26.312500,30.250000 L 40.062500,30.250000 C 40.062500,30.250000 40.603959,31.370993 40.000000,33.625000 C 40.000000,33.625000 26.687500,33.125000 26.687500,33.125000 C 28.537859,31.274641 26.312500,30.250000 26.312500,30.250000 z "
id="path2325"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:nodetypes="ccccc"
id="path2327"
d="M 22.098146,30.250000 L 8.3481460,30.250000 C 8.3481460,30.250000 7.8066870,31.370993 8.4106460,33.625000 C 8.4106460,33.625000 21.723146,33.125000 21.723146,33.125000 C 19.872787,31.274641 22.098146,30.250000 22.098146,30.250000 z "
style="opacity:0.36000000;stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient2337)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

View file

@ -0,0 +1,469 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="drive-harddisk.svg"
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/devices"
inkscape:version="0.43+devel"
sodipodi:version="0.32"
id="svg2913"
height="48px"
width="48px">
<defs
id="defs3">
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6719"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
inkscape:collect="always"
id="linearGradient5060">
<stop
style="stop-color:black;stop-opacity:1;"
offset="0"
id="stop5062" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5064" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6717"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
id="linearGradient5048">
<stop
style="stop-color:black;stop-opacity:0;"
offset="0"
id="stop5050" />
<stop
id="stop5056"
offset="0.5"
style="stop-color:black;stop-opacity:1;" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5052" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient6715"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" />
<linearGradient
id="linearGradient2555">
<stop
id="stop2557"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
style="stop-color:#e6e6e6;stop-opacity:1.0000000;"
offset="0.50000000"
id="stop2561" />
<stop
id="stop2563"
offset="0.75000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
style="stop-color:#e1e1e1;stop-opacity:1.0000000;"
offset="0.84166664"
id="stop2565" />
<stop
id="stop2559"
offset="1.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient4274">
<stop
style="stop-color:#ffffff;stop-opacity:0.25490198;"
offset="0.0000000"
id="stop4276" />
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop4278" />
</linearGradient>
<linearGradient
id="linearGradient4264"
inkscape:collect="always">
<stop
id="stop4266"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop4268"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4254"
inkscape:collect="always">
<stop
id="stop4256"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop4258"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4244">
<stop
id="stop4246"
offset="0.0000000"
style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
<stop
id="stop4248"
offset="1.0000000"
style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient4236"
inkscape:collect="always">
<stop
id="stop4238"
offset="0"
style="stop-color:#eeeeee;stop-opacity:1;" />
<stop
id="stop4240"
offset="1"
style="stop-color:#eeeeee;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4228">
<stop
id="stop4230"
offset="0.0000000"
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
<stop
id="stop4232"
offset="1.0000000"
style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient4184">
<stop
id="stop4186"
offset="0.0000000"
style="stop-color:#838383;stop-opacity:1.0000000;" />
<stop
id="stop4188"
offset="1.0000000"
style="stop-color:#bbbbbb;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
gradientTransform="translate(0.795493,-1.325821)"
y2="35.281250"
x2="24.687500"
y1="35.281250"
x1="7.0625000"
gradientUnits="userSpaceOnUse"
id="linearGradient4209"
xlink:href="#linearGradient4184"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="40.943935"
x2="36.183067"
y1="28.481176"
x1="7.6046205"
id="linearGradient4234"
xlink:href="#linearGradient4228"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="33.758667"
x2="12.221823"
y1="37.205811"
x1="12.277412"
id="linearGradient4242"
xlink:href="#linearGradient4236"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,-4.876862)"
r="20.935817"
fy="2.9585190"
fx="15.571491"
cy="2.9585190"
cx="15.571491"
id="radialGradient4250"
xlink:href="#linearGradient4244"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="47.620636"
x2="44.096100"
y1="4.4331360"
x1="12.378357"
id="linearGradient4260"
xlink:href="#linearGradient4254"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651032,0.000000,9.455693)"
r="23.555494"
fy="27.096155"
fx="23.201941"
cy="27.096155"
cx="23.201941"
id="radialGradient4270"
xlink:href="#linearGradient4264"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="26.357183"
x2="23.688078"
y1="11.318835"
x1="23.688078"
id="linearGradient4272"
xlink:href="#linearGradient4274"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2555"
id="linearGradient2553"
x1="33.431175"
y1="31.964777"
x2="21.747974"
y2="11.780679"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
inkscape:window-y="178"
inkscape:window-x="462"
inkscape:window-height="907"
inkscape:window-width="999"
inkscape:document-units="px"
inkscape:grid-bbox="true"
showgrid="false"
inkscape:current-layer="layer2"
inkscape:cy="16.661091"
inkscape:cx="21.494618"
inkscape:zoom="16"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Drive - Hard Disk</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>hdd</rdf:li>
<rdf:li>hard drive</rdf:li>
<rdf:li>fixed</rdf:li>
<rdf:li>media</rdf:li>
<rdf:li>solid</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:identifier />
<dc:source>http://jimmac.musichall.cz</dc:source>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="pix"
id="layer2"
inkscape:groupmode="layer">
<g
transform="matrix(2.45274e-2,0,0,2.086758e-2,45.69054,36.1536)"
id="g6707">
<rect
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect6709"
width="1339.6335"
height="478.35718"
x="-1559.2523"
y="-150.69685" />
<path
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
id="path6711"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
id="path6713"
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
<path
sodipodi:nodetypes="cccsccccccccc"
id="path4196"
d="M 11.285690,7.9626278 C 10.660690,7.9626278 10.254441,8.2528080 10.004442,8.8063808 C 10.004441,8.8063808 3.5356915,25.909938 3.5356915,25.909938 C 3.5356915,25.909938 3.2856915,26.581497 3.2856915,27.691188 C 3.2856915,27.691188 3.2856915,37.341156 3.2856915,37.341156 C 3.2856915,38.423769 3.9434770,38.966158 4.9419415,38.966156 L 43.504440,38.966156 C 44.489293,38.966156 45.098190,38.247976 45.098190,37.122406 L 45.098190,27.472438 C 45.098190,27.472438 45.204153,26.702015 45.004440,26.159938 L 38.285690,8.9626314 C 38.101165,8.4507246 37.648785,7.9745331 37.160690,7.9626278 L 11.285690,7.9626278 z "
style="stroke-opacity:1.0000000;stroke-dasharray:none;stroke-miterlimit:4.0000000;stroke-linejoin:round;stroke-linecap:round;stroke-width:2.0000000;stroke:#535353;fill-rule:evenodd;fill-opacity:1.0000000;fill:none" />
<path
sodipodi:nodetypes="ccccccccc"
id="path4170"
d="M 3.2735915,26.996812 L 4.0381936,26.304597 L 41.647883,26.367097 L 45.110290,26.684395 L 45.110290,37.122927 C 45.110290,38.248496 44.503272,38.966258 43.518419,38.966258 L 4.9354314,38.966258 C 3.9369667,38.966258 3.2735915,38.424207 3.2735915,37.341594 L 3.2735915,26.996812 z "
style="fill:url(#linearGradient4234);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
sodipodi:nodetypes="csccccccs"
id="path3093"
d="M 3.5490842,25.914404 C 2.8347985,27.378690 3.5484686,28.307261 4.5847985,28.307261 C 4.5847985,28.307261 43.584797,28.307261 43.584797,28.307261 C 44.703844,28.283451 45.430035,27.295356 45.013368,26.164403 L 38.299082,8.9537044 C 38.114558,8.4417976 37.644320,7.9656058 37.156225,7.9537008 L 11.299083,7.9537008 C 10.674083,7.9537008 10.263369,8.2572740 10.013370,8.8108468 C 10.013370,8.8108468 3.5490842,25.914404 3.5490842,25.914404 z "
style="fill:url(#radialGradient4250);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<rect
y="31.174183"
x="7.8579960"
height="5.5625000"
width="17.625000"
id="rect4174"
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient4209);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.4089999;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
<path
sodipodi:nodetypes="cscc"
id="path4194"
d="M 7.8579947,36.736680 C 7.8579947,36.736680 7.8579947,32.725195 7.8579947,32.725195 C 9.6935221,35.904421 16.154485,36.736680 20.795492,36.736680 C 20.795492,36.736680 7.8579947,36.736680 7.8579947,36.736680 z "
style="opacity:0.81142857;stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient4242)" />
<path
sodipodi:nodetypes="cccccccc"
id="path4201"
d="M 44.796162,25.628688 C 44.859684,26.878662 44.382159,27.944528 43.474046,27.972438 C 43.474046,27.972438 5.3553296,27.972437 5.3553297,27.972438 C 4.0660978,27.972438 3.4875937,27.647491 3.2712790,27.104382 C 3.3630404,28.048714 4.0970964,28.753688 5.3553297,28.753688 C 5.3553296,28.753687 43.474046,28.753688 43.474046,28.753688 C 44.550053,28.720617 45.226851,27.329664 44.826210,25.758897 L 44.796162,25.628688 z "
style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
id="path4211"
d="M 10.968750 10.156250 C 10.922675 10.356571 10.781250 10.543047 10.781250 10.750000 C 10.781250 11.698605 11.372230 12.539474 12.125000 13.343750 C 12.365268 13.189675 12.490117 12.989342 12.750000 12.843750 C 11.809691 12.027746 11.196604 11.127168 10.968750 10.156250 z M 37.625000 10.156250 C 37.396273 11.125866 36.782988 12.028676 35.843750 12.843750 C 36.117894 12.997332 36.247738 13.211990 36.500000 13.375000 C 37.257262 12.568344 37.812500 11.701956 37.812500 10.750000 C 37.812500 10.543047 37.670906 10.356571 37.625000 10.156250 z M 39.812500 18.593750 C 39.198709 22.633861 32.513887 25.843750 24.281250 25.843750 C 16.068996 25.843751 9.4211001 22.650964 8.7812500 18.625000 C 8.7488928 18.822132 8.6562500 19.016882 8.6562500 19.218750 C 8.6562503 23.536697 15.645354 27.062501 24.281250 27.062500 C 32.917146 27.062500 39.937499 23.536698 39.937500 19.218750 C 39.937500 19.005826 39.848449 18.801394 39.812500 18.593750 z "
style="opacity:0.69142857;color:#000000;fill:url(#linearGradient4272);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
<path
transform="translate(8.838843e-2,0.176776)"
d="M 8.5736699 25.593554 A 1.3700194 1.0164660 0 1 1 5.8336310,25.593554 A 1.3700194 1.0164660 0 1 1 8.5736699 25.593554 z"
sodipodi:ry="1.0164660"
sodipodi:rx="1.3700194"
sodipodi:cy="25.593554"
sodipodi:cx="7.2036505"
id="path4224"
style="opacity:1.0000000;color:#000000;fill:#ffffff;fill-opacity:0.45762709;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
style="opacity:1.0000000;color:#000000;fill:#ffffff;fill-opacity:0.45762709;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
id="path4226"
sodipodi:cx="7.2036505"
sodipodi:cy="25.593554"
sodipodi:rx="1.3700194"
sodipodi:ry="1.0164660"
d="M 8.5736699 25.593554 A 1.3700194 1.0164660 0 1 1 5.8336310,25.593554 A 1.3700194 1.0164660 0 1 1 8.5736699 25.593554 z"
transform="translate(33.96705,8.838804e-2)" />
<path
style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
d="M 11.642515,8.4157227 C 11.040823,8.4157227 10.649724,8.6950813 10.409049,9.2280100 C 10.409048,9.2280100 3.9940341,25.818732 3.9940341,25.818732 C 3.9940341,25.818732 3.7533573,26.465247 3.7533573,27.533555 C 3.7533573,27.533555 3.7533573,36.823651 3.7533573,36.823651 C 3.7533573,38.178391 4.1974134,38.450550 5.3478414,38.450550 L 43.034746,38.450550 C 44.357872,38.450550 44.569062,38.134153 44.569062,36.613058 L 44.569062,27.322962 C 44.569062,27.322962 44.671072,26.581271 44.478807,26.059409 L 37.885616,9.2534336 C 37.707973,8.7606171 37.334964,8.4271840 36.865071,8.4157227 L 11.642515,8.4157227 z "
id="path4252"
sodipodi:nodetypes="cccsccccccccc" />
<path
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882"
d="M 40.500000,31.429166 L 40.500000,36.450101"
id="path4282" />
<path
id="path4284"
d="M 38.500000,31.488943 L 38.500000,36.509878"
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" />
<path
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882"
d="M 36.500000,31.488943 L 36.500000,36.509878"
id="path4286" />
<path
id="path4288"
d="M 34.500000,31.488943 L 34.500000,36.509878"
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" />
<path
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882"
d="M 32.500000,31.488943 L 32.500000,36.509878"
id="path4290" />
<path
id="path4292"
d="M 30.500000,31.488943 L 30.500000,36.509878"
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" />
<path
id="path4294"
d="M 39.500000,31.479065 L 39.500000,36.500000"
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000"
d="M 37.500000,31.538842 L 37.500000,36.559777"
id="path4296" />
<path
id="path4298"
d="M 35.500000,31.538842 L 35.500000,36.559777"
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000"
d="M 33.500000,31.538842 L 33.500000,36.559777"
id="path4300" />
<path
id="path4302"
d="M 31.500000,31.538842 L 31.500000,36.559777"
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
id="path4572"
d="M 7.8750000,31.187500 L 7.8750000,36.718750 L 20.437500,36.718750 L 8.2187500,36.375000 L 7.8750000,31.187500 z "
style="opacity:0.44000000;fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
sodipodi:type="arc"
style="opacity:0.20571424;color:#000000;fill:url(#linearGradient2553);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.93365198;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible"
id="path2545"
sodipodi:cx="25.000000"
sodipodi:cy="19.562500"
sodipodi:rx="14.875000"
sodipodi:ry="6.6875000"
d="M 39.875000 19.562500 A 14.875000 6.6875000 0 1 1 10.125000,19.562500 A 14.875000 6.6875000 0 1 1 39.875000 19.562500 z"
transform="matrix(1.037815,0.000000,0.000000,1.060747,-1.632878,-2.094626)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB

View file

@ -0,0 +1,390 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="drive-removable-media.svg"
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/devices"
inkscape:version="0.43+devel"
sodipodi:version="0.32"
id="svg2913"
height="48px"
width="48px">
<defs
id="defs3">
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6719"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
inkscape:collect="always"
id="linearGradient5060">
<stop
style="stop-color:black;stop-opacity:1;"
offset="0"
id="stop5062" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5064" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6717"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
id="linearGradient5048">
<stop
style="stop-color:black;stop-opacity:0;"
offset="0"
id="stop5050" />
<stop
id="stop5056"
offset="0.5"
style="stop-color:black;stop-opacity:1;" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5052" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient6715"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" />
<linearGradient
id="linearGradient5699">
<stop
id="stop5701"
offset="0"
style="stop-color:#7a7a7a;stop-opacity:1;" />
<stop
id="stop5703"
offset="1"
style="stop-color:#a5a5a5;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient2681">
<stop
style="stop-color:#000000;stop-opacity:0.47524753;"
offset="0.0000000"
id="stop2683" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop2685" />
</linearGradient>
<linearGradient
id="linearGradient2673">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2675" />
<stop
style="stop-color:#6f6f6f;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop2677" />
</linearGradient>
<linearGradient
id="linearGradient4264"
inkscape:collect="always">
<stop
id="stop4266"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop4268"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4254"
inkscape:collect="always">
<stop
id="stop4256"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop4258"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4244">
<stop
id="stop4246"
offset="0.0000000"
style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
<stop
id="stop4248"
offset="1.0000000"
style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient4228">
<stop
id="stop4230"
offset="0.0000000"
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
<stop
id="stop4232"
offset="1.0000000"
style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="40.943935"
x2="36.183067"
y1="28.481176"
x1="7.6046205"
id="linearGradient4234"
xlink:href="#linearGradient4228"
inkscape:collect="always"
gradientTransform="translate(0.000000,5.546300e-2)" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,-4.821398)"
r="20.935817"
fy="2.9585190"
fx="15.571491"
cy="2.9585190"
cx="15.571491"
id="radialGradient4250"
xlink:href="#linearGradient4244"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="47.620636"
x2="44.096100"
y1="4.4331360"
x1="12.378357"
id="linearGradient4260"
xlink:href="#linearGradient4254"
inkscape:collect="always"
gradientTransform="translate(0.000000,5.546300e-2)" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651032,-6.731815e-16,9.455693)"
r="23.555494"
fy="27.096155"
fx="23.201941"
cy="27.096155"
cx="23.201941"
id="radialGradient4270"
xlink:href="#linearGradient4264"
inkscape:collect="always" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2673"
id="radialGradient2679"
cx="40.796875"
cy="33.734375"
fx="40.796875"
fy="33.734375"
r="0.98437500"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.253968,-7.218212e-15,7.218212e-15,1.253968,-10.36111,-8.567460)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2681"
id="linearGradient2687"
x1="25.785229"
y1="32.363384"
x2="25.785229"
y2="35.670216"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2681"
id="linearGradient2689"
gradientUnits="userSpaceOnUse"
x1="25.785229"
y1="32.363384"
x2="25.785229"
y2="35.670216" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="10.596288"
x2="16.127340"
y1="22.705490"
x1="34.420757"
id="linearGradient5705"
xlink:href="#linearGradient5699"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
fill="#f57900"
inkscape:showpageshadow="false"
inkscape:window-y="163"
inkscape:window-x="275"
inkscape:window-height="683"
inkscape:window-width="872"
inkscape:document-units="px"
inkscape:grid-bbox="true"
showgrid="false"
inkscape:current-layer="layer2"
inkscape:cy="10.253819"
inkscape:cx="89.378036"
inkscape:zoom="2.8284271"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="0.36078431"
bordercolor="#666666"
pagecolor="#ffffff"
id="base" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Drive - Removable</dc:title>
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>media</rdf:li>
<rdf:li>removable</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:identifier />
<dc:source>http://jimmac.musichall.cz</dc:source>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="pix"
id="layer2"
inkscape:groupmode="layer">
<g
transform="matrix(2.45274e-2,0,0,2.086758e-2,45.69054,36.1536)"
id="g6707">
<rect
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect6709"
width="1339.6335"
height="478.35718"
x="-1559.2523"
y="-150.69685" />
<path
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
id="path6711"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
id="path6713"
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
<path
sodipodi:nodetypes="cccsccccccccc"
id="path4196"
d="M 11.285690,8.0180850 C 10.660690,8.0180850 10.254441,8.3082650 10.004442,8.8618380 C 10.004441,8.8618380 3.5356915,25.965402 3.5356915,25.965402 C 3.5356915,25.965402 3.2856915,26.636961 3.2856915,27.746652 C 3.2856915,27.746652 3.2856915,37.396620 3.2856915,37.396620 C 3.2856915,38.479233 3.9434770,39.021622 4.9419415,39.021620 L 43.504440,39.021620 C 44.489293,39.021620 45.098190,38.303440 45.098190,37.177870 L 45.098190,27.527902 C 45.098190,27.527902 45.204153,26.757479 45.004440,26.215402 L 38.285690,9.0180890 C 38.101165,8.5061820 37.648785,8.0299910 37.160690,8.0180850 L 11.285690,8.0180850 z "
style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#535353;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" />
<path
sodipodi:nodetypes="ccccccccc"
id="path4170"
d="M 3.2735915,27.052276 L 4.0381936,26.360061 L 41.647883,26.422561 L 45.110290,26.739859 L 45.110290,37.178391 C 45.110290,38.303960 44.503272,39.021722 43.518419,39.021722 L 4.9354314,39.021722 C 3.9369667,39.021722 3.2735915,38.479671 3.2735915,37.397058 L 3.2735915,27.052276 z "
style="fill:url(#linearGradient4234);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
sodipodi:nodetypes="csccccccs"
id="path3093"
d="M 3.5490842,25.969868 C 2.8347985,27.434154 3.5484686,28.362725 4.5847985,28.362725 C 4.5847985,28.362725 43.584797,28.362725 43.584797,28.362725 C 44.703844,28.338915 45.430035,27.350820 45.013368,26.219867 L 38.299082,9.0091620 C 38.114558,8.4972550 37.644320,8.0210630 37.156225,8.0091580 L 11.299083,8.0091580 C 10.674083,8.0091580 10.263369,8.3127310 10.013370,8.8663040 C 10.013370,8.8663040 3.5490842,25.969868 3.5490842,25.969868 z "
style="fill:url(#radialGradient4250);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
sodipodi:nodetypes="ccccccc"
id="path4201"
d="M 43.562434,27.674347 C 43.562434,27.674347 5.4437179,27.674346 5.4437180,27.674347 C 4.1544861,27.674347 3.5317878,27.437788 3.3154731,26.894679 C 3.4072345,27.839011 4.1854847,28.455597 5.4437180,28.455597 C 5.4437179,28.455596 43.562434,28.455597 43.562434,28.455597 C 44.638441,28.422526 45.301832,27.596846 45.047181,26.300495 C 44.913133,27.142077 44.470547,27.646437 43.562434,27.674347 z "
style="opacity:1.0000000;fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
<path
sodipodi:nodetypes="ccccccccc"
id="path5637"
d="M 38.344670,9.2120874 C 38.344670,9.2120874 44.500000,24.750000 44.500000,24.750000 C 43.881282,24.352252 43.618718,24.036612 43.000000,24.125000 L 5.2500000,24.125000 C 4.5428932,24.125000 3.8383883,24.875000 3.8383883,24.875000 L 10.125000,8.8750000 C 10.258882,8.3753463 10.748699,8.0732233 11.411612,8.0732233 L 36.830806,7.9848350 C 38.156631,8.1616117 38.123699,8.5933690 38.344670,9.2120874 z "
style="opacity:1;color:#000000;fill:url(#linearGradient5705);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
<path
style="stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1;fill:#686868"
d="M 44.707773,25.362009 C 44.373548,25.128501 44.072800,25.167489 43.518240,25.139579 C 43.518240,25.139579 4.7366112,24.874414 4.7366112,24.874414 C 4.1620870,24.918608 3.4957121,25.684093 3.4957121,25.684093 C 3.4957121,25.684093 4.0667741,24.284062 4.0667741,24.284062 C 4.0667741,24.284062 4.4064556,23.120892 5.6646889,23.120892 C 5.6646888,23.120893 42.855327,23.120892 42.855327,23.120892 C 43.577781,23.153963 44.022560,23.550547 44.207491,24.016460 L 44.707773,25.362009 z "
id="path5697"
sodipodi:nodetypes="cccsccccc" />
<path
style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
d="M 11.642515,8.4711800 C 11.040823,8.4711800 10.649724,8.7505390 10.409049,9.2834670 C 10.409048,9.2834670 3.9940341,25.874196 3.9940341,25.874196 C 3.9940341,25.874196 3.7533573,26.520711 3.7533573,27.589019 C 3.7533573,27.589019 3.7533573,36.879115 3.7533573,36.879115 C 3.7533573,38.233855 4.1974134,38.506014 5.3478414,38.506014 L 43.034746,38.506014 C 44.357872,38.506014 44.569062,38.189617 44.569062,36.668522 L 44.569062,27.378426 C 44.569062,27.378426 44.671072,26.636735 44.478807,26.114873 L 37.885616,9.3088910 C 37.707973,8.8160750 37.334964,8.4826410 36.865071,8.4711800 L 11.642515,8.4711800 z "
id="path4252"
sodipodi:nodetypes="cccsccccccccc" />
<g
id="g2142"
transform="matrix(0.828197,0.000000,0.000000,0.610240,4.176000,11.16143)"
style="fill:url(#linearGradient2687);fill-opacity:1.0000000">
<rect
y="32.363384"
x="5.3414402"
height="3.8650389"
width="37.930714"
id="rect2151"
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2689);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible" />
</g>
<path
style="opacity:0.71428573;fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
d="M 8.6250000,33.250000 C 8.6250000,33.250000 9.0696486,34.066942 9.8651437,34.022748 C 9.8651437,34.022748 40.715385,34.000000 40.715385,34.000000 C 40.671191,31.569320 40.027885,30.881430 40.027885,30.881430 L 40.062500,33.312500 L 8.6250000,33.250000 z "
id="path1899"
sodipodi:nodetypes="cccccc" />
<path
sodipodi:type="arc"
style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2679);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible;font-family:Bitstream Vera Sans"
id="path2671"
sodipodi:cx="41.015625"
sodipodi:cy="33.984375"
sodipodi:rx="0.98437500"
sodipodi:ry="0.98437500"
d="M 42.000000 33.984375 A 0.98437500 0.98437500 0 1 1 40.031250,33.984375 A 0.98437500 0.98437500 0 1 1 42.000000 33.984375 z"
transform="matrix(1.380952,0.000000,0.000000,1.380952,-15.62500,-10.94643)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

512
design/icons/globe-lips.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 28 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 41 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 72 KiB

View file

@ -0,0 +1,433 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="48pt"
height="48pt"
viewBox="0 0 256 256"
id="svg2"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.42+devel"
sodipodi:docname="gtk-zoom-in.svg"
sodipodi:docbase="/home/cschalle/gnome/gnome-themes-extras/Nuvola/icons/scalable/stock"><metadata
id="metadata72"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
inkscape:cy="417.84947"
inkscape:cx="305.25953"
inkscape:zoom="0.43415836"
inkscape:window-height="563"
inkscape:window-width="822"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:window-x="0"
inkscape:window-y="30"
inkscape:current-layer="svg2" /><defs
id="defs125" />
<g
id="switch6">
<foreignObject
id="foreignObject8"
height="1"
width="1"
y="0"
x="0"
requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
<i:pgfRef
xlink:href="#adobe_illustrator_pgf">
</i:pgfRef>
</foreignObject>
<g
id="g10">
<g
id="Layer_1">
<g
id="g13">
<linearGradient
x1="15.1685"
y1="99.097702"
x2="183.0273"
y2="99.097702"
id="XMLID_14_"
gradientUnits="userSpaceOnUse">
<stop
style="stop-color:#494949;stop-opacity:1"
offset="0"
id="stop16" />
<stop
style="stop-color:#616161;stop-opacity:1"
offset="0.5"
id="stop18" />
<stop
style="stop-color:#000000;stop-opacity:1"
offset="1"
id="stop20" />
</linearGradient>
<path
d="M 39.521,39.521 L 39.521,39.521 C 7.05,71.993 7.05,124.83 39.521,157.302 C 53.626,171.407 72.322,179.987 92.166,181.459 C 111.368,182.884 130.468,177.538 146.195,166.466 C 148.178,168.45 160.082,180.353 160.082,180.353 C 164.44,184.711 172.085,183.641 177.863,177.863 C 181.257,174.468 183.027,170.43 183.027,166.793 C 183.027,164.237 182.153,161.88 180.355,160.082 C 180.355,160.082 168.451,148.178 166.466,146.193 C 176.357,132.146 181.687,115.413 181.687,98.31 C 181.687,96.265 181.612,94.215 181.459,92.164 C 179.985,72.322 171.406,53.626 157.302,39.52 C 124.83,7.051 71.994,7.051 39.521,39.521 z "
style="fill:url(#XMLID_14_)"
id="path22" />
<linearGradient
x1="196.70509"
y1="248.7227"
x2="196.70509"
y2="149.4514"
id="XMLID_15_"
gradientUnits="userSpaceOnUse">
<stop
style="stop-color:#7c0000;stop-opacity:1"
offset="0"
id="stop25" />
<stop
style="stop-color:#cf0000;stop-opacity:1"
offset="1"
id="stop27" />
</linearGradient>
<path
d="M 160.184,160.188 C 155.228,165.142 152.578,171.192 152.578,176.548 C 152.578,179.695 153.493,182.605 155.395,184.909 L 155.457,184.983 L 155.515,185.132 L 207.64,237.259 C 213.674,243.291 224.906,241.513 233.21,233.21 C 241.515,224.904 243.293,213.672 237.261,207.64 L 185.07,155.449 L 184.952,155.429 C 178.726,150.247 168.079,152.292 160.184,160.188 z "
style="fill:url(#XMLID_15_)"
id="path29" />
<linearGradient
x1="17.168501"
y1="99.1045"
x2="181.0253"
y2="99.1045"
id="XMLID_16_"
gradientUnits="userSpaceOnUse">
<stop
style="stop-color:#a2a2a2;stop-opacity:1"
offset="0"
id="stop32" />
<stop
style="stop-color:#494949;stop-opacity:1"
offset="1"
id="stop34" />
</linearGradient>
<path
d="M 42.35,42.35 C 27.4,57.301 19.167,77.211 19.167,98.412 C 19.167,119.613 27.4,139.523 42.35,154.475 C 55.779,167.903 73.575,176.07 92.462,177.471 C 111.29,178.868 130.04,173.472 145.258,162.276 L 146.643,161.258 L 162.911,177.526 C 165.657,180.272 170.87,179.202 175.036,175.036 C 179.201,170.869 180.272,165.656 177.528,162.911 L 161.258,146.641 L 162.276,145.257 C 173.473,130.039 178.87,111.289 177.471,92.462 C 176.069,73.574 167.902,55.777 154.475,42.35 C 123.562,11.438 73.263,11.438 42.35,42.35 z "
style="fill:url(#XMLID_16_)"
id="path36" />
<linearGradient
x1="47.964802"
y1="190.2119"
x2="69.606903"
y2="211.8539"
id="XMLID_17_"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,258.0000,0.000000)">
<stop
style="stop-color:#ffc957;stop-opacity:1"
offset="0"
id="stop39" />
<stop
style="stop-color:#ff6d00;stop-opacity:1"
offset="1"
id="stop41" />
</linearGradient>
<path
d="M 181.85,160.041 L 233.354,211.545 C 237.139,215.332 235.325,223.281 229.303,229.303 C 223.28,235.326 215.332,237.139 211.545,233.352 L 160.041,181.848 L 181.85,160.041 z "
style="fill:url(#XMLID_17_)"
id="path43" />
<linearGradient
x1="48.526901"
y1="194.8232"
x2="64.114403"
y2="210.4108"
id="XMLID_18_"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1.224300,-0.128800,0.128800,1.224300,243.0516,-40.91190)">
<stop
style="stop-color:#ffff66;stop-opacity:1"
offset="0"
id="stop46" />
<stop
style="stop-color:#ff6d00;stop-opacity:1"
offset="1"
id="stop48" />
</linearGradient>
<path
d="M 181.08,162.141 L 231.274,212.335 C 234.962,216.025 234.101,222.867 229.349,227.617 C 224.597,232.369 217.757,233.228 214.067,229.542 L 163.873,179.348 L 181.08,162.141 z "
style="fill:url(#XMLID_18_)"
id="path50" />
<linearGradient
x1="182.1367"
y1="182.1357"
x2="164.09219"
y2="164.09129"
id="XMLID_19_"
gradientUnits="userSpaceOnUse">
<stop
style="stop-color:#ffd700;stop-opacity:1"
offset="0"
id="stop53" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="1"
id="stop55" />
</linearGradient>
<path
d="M 181.85,160.041 C 185.635,163.826 183.821,171.777 177.797,177.799 C 171.776,183.82 163.828,185.635 160.041,181.848 C 156.256,178.063 158.068,170.116 164.092,164.092 C 170.113,158.07 178.063,156.256 181.85,160.041 z "
style="fill:url(#XMLID_19_)"
id="path57" />
<linearGradient
x1="131.58591"
y1="-4.0268998"
x2="131.58591"
y2="210.97231"
id="XMLID_20_"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.707100,0.707100,0.707100,0.707100,148.8760,-37.21400)">
<stop
style="stop-color:#dadada;stop-opacity:1"
offset="0"
id="stop60" />
<stop
style="stop-color:#949494;stop-opacity:1"
offset="0.6124"
id="stop62" />
<stop
style="stop-color:#dadada;stop-opacity:1"
offset="1"
id="stop64" />
</linearGradient>
<path
d="M 43.43,153.396 C 13.063,123.028 13.063,73.793 43.43,43.428 C 73.795,13.061 123.03,13.061 153.397,43.428 C 181.657,71.687 183.61,116.282 159.272,146.812 L 176.448,163.988 C 178.514,166.052 177.397,170.515 173.958,173.957 C 170.517,177.396 166.054,178.514 163.989,176.447 L 146.813,159.273 C 116.283,183.611 71.688,181.656 43.43,153.396 z "
style="fill:url(#XMLID_20_)"
id="path66" />
<linearGradient
x1="134.8213"
y1="149.9229"
x2="124.5826"
y2="149.9229"
id="XMLID_21_"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.707100,0.707100,0.582600,0.582600,169.5297,-16.56120)">
<stop
style="stop-color:#b2b2b2;stop-opacity:1"
offset="0"
id="stop69" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="1"
id="stop71" />
</linearGradient>
<path
d="M 159.183,149.769 C 159.183,149.769 176.389,166.976 177.37,167.954 C 177.063,168.708 176.214,170.158 174.519,171.85 L 174.519,171.85 C 172.822,173.547 171.373,174.397 170.621,174.701 C 169.643,173.723 152.436,156.513 152.436,156.513 L 159.183,149.769 z "
style="fill:url(#XMLID_21_)"
id="path73" />
<linearGradient
x1="27.7358"
y1="98.412102"
x2="169.0889"
y2="98.412102"
id="XMLID_22_"
gradientUnits="userSpaceOnUse">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop76" />
<stop
style="stop-color:#494949;stop-opacity:1"
offset="1"
id="stop78" />
</linearGradient>
<path
d="M 148.412,48.412 C 175.98,75.982 175.982,120.842 148.412,148.412 C 120.84,175.982 75.982,175.98 48.412,148.412 C 20.844,120.842 20.844,75.982 48.412,48.412 C 75.982,20.843 120.842,20.843 148.412,48.412 z "
style="fill:url(#XMLID_22_)"
id="path80" />
<radialGradient
cx="92.632797"
cy="20.0571"
r="176.5367"
fx="92.632797"
fy="20.0571"
id="XMLID_23_"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.707100,0.707100,0.707100,0.707100,148.8760,-37.21400)">
<stop
style="stop-color:#0035ed;stop-opacity:1"
offset="0.0056"
id="stop83" />
<stop
style="stop-color:#94caff;stop-opacity:1"
offset="0.56739998"
id="stop85" />
<stop
style="stop-color:#c9e6ff;stop-opacity:1"
offset="0.70789999"
id="stop87" />
<stop
style="stop-color:#034cfe;stop-opacity:1"
offset="1"
id="stop89" />
</radialGradient>
<path
d="M 145.92,50.905 C 172.115,77.1 172.115,119.722 145.92,145.92 C 119.723,172.115 77.102,172.115 50.906,145.92 C 24.709,119.722 24.711,77.1 50.906,50.905 C 77.102,24.709 119.723,24.709 145.92,50.905 z "
style="fill:url(#XMLID_23_)"
id="path91" />
<radialGradient
cx="92.957001"
cy="19.922899"
r="176.53951"
fx="92.957001"
fy="19.922899"
id="XMLID_24_"
gradientUnits="userSpaceOnUse">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0.0056"
id="stop94" />
<stop
style="stop-color:#94caff;stop-opacity:1"
offset="0.44999999"
id="stop96" />
<stop
style="stop-color:#c9e6ff;stop-opacity:1"
offset="0.60000002"
id="stop98" />
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="1"
id="stop100" />
</radialGradient>
<path
d="M 53.735,53.733 L 53.735,53.733 C 41.821,65.647 35.26,81.515 35.259,98.412 C 35.259,115.309 41.821,131.177 53.736,143.092 C 78.371,167.727 118.456,167.727 143.092,143.092 C 167.727,118.454 167.727,78.369 143.092,53.734 C 118.455,29.098 78.37,29.098 53.735,53.733 z "
style="fill:url(#XMLID_24_)"
id="path102" />
</g>
<rect
width="256"
height="256"
x="0"
y="0"
style="fill:none"
id="_x3C_Slice_x3E_" />
<polyline
id="_x3C_Slice_x3E__1_"
i:knockout="Off"
points="0,256 0,0 256,0 256,256 "
style="fill:none" />
<g
id="g106">
<linearGradient
x1="201.1055"
y1="191"
x2="17.3937"
y2="191"
id="XMLID_25_"
gradientUnits="userSpaceOnUse">
<stop
style="stop-color:#003333;stop-opacity:1"
offset="0"
id="stop109" />
<stop
style="stop-color:#006a00;stop-opacity:1"
offset="1"
id="stop111" />
</linearGradient>
<path
d="M 125,163 L 113,163 L 113,151 C 113,142.729 106.271,136 98,136 L 72,136 C 63.729,136 57,142.729 57,151 L 57,163 L 45,163 C 36.729,163 30,169.729 30,178 L 30,204 C 30,212.271 36.729,219 45,219 L 57,219 L 57,231 C 57,239.271 63.729,246 72,246 L 98,246 C 106.271,246 113,239.271 113,231 L 113,219 L 125,219 C 133.271,219 140,212.271 140,204 L 140,178 C 140,169.729 133.271,163 125,163 z "
style="fill:url(#XMLID_25_)"
id="path113" />
<path
d="M 125,168 L 108,168 L 108,151 C 108,145.478 103.522,141 98,141 L 72,141 C 66.478,141 62,145.478 62,151 L 62,168 L 45,168 C 39.478,168 35,172.478 35,178 L 35,204 C 35,209.522 39.478,214 45,214 L 62,214 L 62,231 C 62,236.522 66.478,241 72,241 L 98,241 C 103.522,241 108,236.522 108,231 L 108,214 L 125,214 C 130.522,214 135,209.522 135,204 L 135,178 C 135,172.478 130.522,168 125,168 z "
style="fill:#ffffff"
id="path115" />
<linearGradient
x1="201.1035"
y1="191"
x2="17.3915"
y2="191"
id="XMLID_26_"
gradientUnits="userSpaceOnUse">
<stop
style="stop-color:#33cc33;stop-opacity:1"
offset="0"
id="stop118" />
<stop
style="stop-color:#006a00;stop-opacity:1"
offset="1"
id="stop120" />
</linearGradient>
<polygon
points="125,178 98,178 98,151 72,151 72,178 45,178 45,204 72,204 72,231 98,231 98,204 125,204 125,178 "
style="fill:url(#XMLID_26_)"
id="polygon122" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -0,0 +1,701 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="240.00000"
inkscape:export-xdpi="240.00000"
inkscape:export-filename="/home/jimmac/gfx/novell/pdes/trunk/docs/BIGmime-text.png"
sodipodi:docname="help-contents.svg"
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
inkscape:version="0.43+devel"
sodipodi:version="0.32"
id="svg249"
height="48.000000px"
width="48.000000px"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs3">
<linearGradient
inkscape:collect="always"
id="linearGradient4542">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop4544" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop4546" />
</linearGradient>
<linearGradient
id="linearGradient15662">
<stop
id="stop15664"
offset="0.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop15666"
offset="1.0000000"
style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
id="aigrd3"
cx="20.8921"
cy="64.5679"
r="5.257"
fx="20.8921"
fy="64.5679"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
style="stop-color:#F0F0F0"
id="stop15573" />
<stop
offset="1.0000000"
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
id="stop15575" />
</radialGradient>
<radialGradient
id="aigrd2"
cx="20.8921"
cy="114.5684"
r="5.256"
fx="20.8921"
fy="114.5684"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
style="stop-color:#F0F0F0"
id="stop15566" />
<stop
offset="1.0000000"
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
id="stop15568" />
</radialGradient>
<linearGradient
id="linearGradient269">
<stop
id="stop270"
offset="0.0000000"
style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
<stop
id="stop271"
offset="1.0000000"
style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient259">
<stop
id="stop260"
offset="0.0000000"
style="stop-color:#fafafa;stop-opacity:1.0000000;" />
<stop
id="stop261"
offset="1.0000000"
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient269"
id="radialGradient15656"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.968273,0.000000,0.000000,1.032767,3.353553,0.646447)"
cx="8.8244190"
cy="3.7561285"
fx="8.8244190"
fy="3.7561285"
r="37.751713" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient259"
id="radialGradient15658"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.960493,1.041132)"
cx="33.966679"
cy="35.736916"
fx="33.966679"
fy="35.736916"
r="86.708450" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient15662"
id="radialGradient15668"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.968273,0.000000,0.000000,1.032767,3.353553,0.646447)"
cx="8.1435566"
cy="7.2678967"
fx="8.1435566"
fy="7.2678967"
r="38.158695" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4542"
id="radialGradient4548"
cx="24.306795"
cy="42.07798"
fx="24.306795"
fy="42.07798"
r="15.821514"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.284916,0.000000,30.08928)"
gradientUnits="userSpaceOnUse" />
<radialGradient
id="aigrd8"
cx="37.6357"
cy="-29.6997"
r="12.8245"
fx="37.6357"
fy="-29.6997"
gradientTransform="matrix(0 1 -1 0 -17.6563 -25.5215)"
gradientUnits="userSpaceOnUse">
<stop
offset="0.0000000"
style="stop-color:#210101;stop-opacity:1.0000000;"
id="stop2061" />
<stop
id="stop3650"
style="stop-color:#ff747e;stop-opacity:1.0000000;"
offset="0.50000000" />
<stop
offset="1.0000000"
style="stop-color:#830000;stop-opacity:1.0000000;"
id="stop2079" />
</radialGradient>
<radialGradient
id="aigrd5"
cx="11.5034"
cy="11.3452"
r="9.2994"
fx="11.5034"
fy="11.3452"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
style="stop-color:#C5C5C5"
id="stop1990" />
<stop
offset="0.237"
style="stop-color:#C8C8C8"
id="stop1992" />
<stop
offset="0.4082"
style="stop-color:#D1D1D1"
id="stop1994" />
<stop
offset="0.5587"
style="stop-color:#E1E1E1"
id="stop1996" />
<stop
offset="0.6964"
style="stop-color:#F7F7F7"
id="stop1998" />
<stop
offset="0.736"
style="stop-color:#FFFFFF"
id="stop2000" />
<stop
offset="0.8191"
style="stop-color:#FCFCFC"
id="stop2002" />
<stop
offset="0.8812"
style="stop-color:#F2F2F2"
id="stop2004" />
<stop
offset="0.9364"
style="stop-color:#E2E2E2"
id="stop2006" />
<stop
offset="0.9875"
style="stop-color:#CCCCCC"
id="stop2008" />
<stop
offset="1"
style="stop-color:#C5C5C5"
id="stop2010" />
</radialGradient>
<radialGradient
id="aigrd4"
cx="18.1523"
cy="5.6528"
r="3.5497"
fx="18.1523"
fy="5.6528"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
style="stop-color:#3C3C3C"
id="stop1957" />
<stop
offset="0.3633"
style="stop-color:#3E3E3E"
id="stop1959" />
<stop
offset="0.4942"
style="stop-color:#454545"
id="stop1961" />
<stop
offset="0.5875"
style="stop-color:#505050"
id="stop1963" />
<stop
offset="0.6629"
style="stop-color:#616161"
id="stop1965" />
<stop
offset="0.7276"
style="stop-color:#777777"
id="stop1967" />
<stop
offset="0.7848"
style="stop-color:#939393"
id="stop1969" />
<stop
offset="0.8353"
style="stop-color:#B2B2B2"
id="stop1971" />
<stop
offset="0.8764"
style="stop-color:#D2D2D2"
id="stop1973" />
<stop
offset="0.8998"
style="stop-color:#CECECE"
id="stop1975" />
<stop
offset="0.9223"
style="stop-color:#C3C3C3"
id="stop1977" />
<stop
offset="0.9446"
style="stop-color:#AFAFAF"
id="stop1979" />
<stop
offset="0.9666"
style="stop-color:#949494"
id="stop1981" />
<stop
offset="0.9884"
style="stop-color:#717171"
id="stop1983" />
<stop
offset="1"
style="stop-color:#5B5B5B"
id="stop1985" />
</radialGradient>
<radialGradient
id="aigrd1"
cx="18.1523"
cy="18.3291"
r="3.5495"
fx="18.1523"
fy="18.3291"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
style="stop-color:#3C3C3C"
id="stop1852" />
<stop
offset="0.3633"
style="stop-color:#3E3E3E"
id="stop1854" />
<stop
offset="0.4942"
style="stop-color:#454545"
id="stop1856" />
<stop
offset="0.5875"
style="stop-color:#505050"
id="stop1858" />
<stop
offset="0.6629"
style="stop-color:#616161"
id="stop1860" />
<stop
offset="0.7276"
style="stop-color:#777777"
id="stop1862" />
<stop
offset="0.7848"
style="stop-color:#939393"
id="stop1864" />
<stop
offset="0.8353"
style="stop-color:#B2B2B2"
id="stop1866" />
<stop
offset="0.8764"
style="stop-color:#D2D2D2"
id="stop1868" />
<stop
offset="0.8998"
style="stop-color:#CECECE"
id="stop1870" />
<stop
offset="0.9223"
style="stop-color:#C3C3C3"
id="stop1872" />
<stop
offset="0.9446"
style="stop-color:#AFAFAF"
id="stop1874" />
<stop
offset="0.9666"
style="stop-color:#949494"
id="stop1876" />
<stop
offset="0.9884"
style="stop-color:#717171"
id="stop1878" />
<stop
offset="1"
style="stop-color:#5B5B5B"
id="stop1880" />
</radialGradient>
<linearGradient
id="linearGradient3640"
inkscape:collect="always">
<stop
id="stop3642"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop3644"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#aigrd1"
id="radialGradient5534"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.132196,0.000000,0.000000,2.132196,-97.11122,15.26563)"
cx="18.1523"
cy="18.3291"
fx="18.1523"
fy="18.3291"
r="3.5495" />
<radialGradient
inkscape:collect="always"
xlink:href="#aigrd2"
id="radialGradient5536"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.132196,0.000000,0.000000,2.132196,-91.44192,15.26563)"
cx="5.7334"
cy="18.3291"
fx="5.7334"
fy="18.3291"
r="3.5495" />
<radialGradient
inkscape:collect="always"
xlink:href="#aigrd3"
id="radialGradient5538"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.132196,0.000000,0.000000,2.132196,-91.44192,20.93492)"
cx="5.7334"
cy="5.6528"
fx="5.7334"
fy="5.6528"
r="3.5497" />
<radialGradient
inkscape:collect="always"
xlink:href="#aigrd4"
id="radialGradient5540"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.132196,0.000000,0.000000,2.132196,-97.11122,20.93492)"
cx="18.1523"
cy="5.6528"
fx="18.1523"
fy="5.6528"
r="3.5497" />
<radialGradient
inkscape:collect="always"
xlink:href="#aigrd5"
id="radialGradient5542"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.132196,0.000000,0.000000,2.132196,-94.27657,18.10027)"
cx="11.586308"
cy="11.676833"
fx="11.586308"
fy="11.676833"
r="9.2994" />
<radialGradient
inkscape:collect="always"
xlink:href="#aigrd8"
id="radialGradient5544"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.000000,-1.995477,1.995477,0.000000,-40.29889,-16.87378)"
cx="-30.104782"
cy="-14.617684"
fx="-30.104782"
fy="-14.617684"
r="12.822400" />
<radialGradient
inkscape:collect="always"
xlink:href="#aigrd8"
id="radialGradient5546"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.020236,0.000000,0.000000,-2.018756,-72.22632,-71.13473)"
cx="-1.3652747"
cy="-56.636044"
fx="-1.3652747"
fy="-56.636044"
r="12.826500" />
<radialGradient
inkscape:collect="always"
xlink:href="#aigrd8"
id="radialGradient5548"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.000000,1.975946,-1.975946,0.000000,-126.5395,-31.17259)"
cx="37.638786"
cy="-28.883039"
fx="37.638786"
fy="-28.883039"
r="12.8245" />
<radialGradient
inkscape:collect="always"
xlink:href="#aigrd8"
id="radialGradient5550"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.995477,0.000000,0.000000,1.995477,-93.26485,19.11199)"
cx="11.925323"
cy="12.071112"
fx="11.925323"
fy="12.071112"
r="12.824500" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3640"
id="linearGradient5552"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-92.27870,19.84228)"
x1="15.737945"
y1="9.1388483"
x2="51.313351"
y2="64.278435" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3640"
id="linearGradient5554"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-92.27870,19.84228)"
x1="27.426350"
y1="30.840612"
x2="15.759552"
y2="13.170511" />
</defs>
<sodipodi:namedview
inkscape:window-y="1001"
inkscape:window-x="338"
inkscape:window-height="747"
inkscape:window-width="839"
inkscape:document-units="px"
inkscape:grid-bbox="true"
showgrid="false"
inkscape:current-layer="layer5"
inkscape:cy="31.232715"
inkscape:cx="41.233954"
inkscape:zoom="1"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="0.25490196"
bordercolor="#666666"
pagecolor="#ffffff"
id="base"
inkscape:showpageshadow="false" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Help Contents</dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>help</rdf:li>
<rdf:li>index</rdf:li>
<rdf:li>contents</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer6"
inkscape:label="Shadow">
<path
sodipodi:type="arc"
style="opacity:0.7836257;color:#000000;fill:url(#radialGradient4548);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="path3667"
sodipodi:cx="24.306795"
sodipodi:cy="42.07798"
sodipodi:rx="15.821514"
sodipodi:ry="4.5078058"
d="M 40.128309 42.07798 A 15.821514 4.5078058 0 1 1 8.485281,42.07798 A 15.821514 4.5078058 0 1 1 40.128309 42.07798 z"
transform="translate(0.000000,0.707108)" />
</g>
<g
style="display:inline"
inkscape:groupmode="layer"
inkscape:label="Base"
id="layer1">
<rect
style="color:#000000;fill:url(#radialGradient15658);fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient15656);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
id="rect15391"
width="34.875000"
height="40.920494"
x="6.6035528"
y="3.6464462"
ry="1.1490486" />
<rect
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient15668);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
id="rect15660"
width="32.775887"
height="38.946384"
x="7.6660538"
y="4.5839462"
ry="0.14904857"
rx="0.14904857" />
</g>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="Text"
style="display:inline">
<g
transform="matrix(0.909091,0.000000,0.000000,1.000000,2.363628,0.000000)"
id="g2253">
<rect
style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
id="rect15686"
width="22.000004"
height="1.0000000"
x="15.000002"
y="9.0000000"
rx="0.15156493"
ry="0.065390877" />
<rect
style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
id="rect15690"
width="22.000004"
height="1.0000000"
x="15.000002"
y="13.000000"
rx="0.15156493"
ry="0.065390877" />
<rect
style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
id="rect15694"
width="22.000004"
height="1.0000000"
x="15.000002"
y="17.000000"
rx="0.15156493"
ry="0.065390877" />
<rect
style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
id="rect15698"
width="22.000004"
height="1.0000000"
x="15.000002"
y="21.000000"
rx="0.15156493"
ry="0.065390877" />
<rect
style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
id="rect15732"
width="9.9000053"
height="1.0000000"
x="14.999992"
y="25.000000"
rx="0.068204239"
ry="0.065390877" />
</g>
<g
id="g5499"
transform="matrix(0.857951,0.000000,0.000000,0.857951,89.46235,-7.004529)">
<path
style="fill:url(#radialGradient5534);fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
d="M -58.092025,46.608913 C -62.356416,46.608913 -65.98115,50.233647 -65.98115,54.498038 C -65.98115,58.762431 -62.356416,62.387164 -58.092025,62.387164 C -53.827633,62.387164 -50.202899,58.762431 -50.202899,54.498038 C -50.202899,50.233647 -53.827633,46.608913 -58.092025,46.608913 z M -58.092025,60.681408 C -61.503539,60.681408 -64.275393,57.909553 -64.275393,54.498038 C -64.275393,51.086525 -61.503539,48.31467 -58.092025,48.31467 C -54.68051,48.31467 -51.908656,51.086525 -51.908656,54.498038 C -51.908656,57.909553 -54.68051,60.681408 -58.092025,60.681408 z "
id="path1882" />
<path
style="fill:url(#radialGradient5536);fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
d="M -78.861965,46.608913 C -83.126357,46.608913 -86.751091,50.233647 -86.751091,54.498038 C -86.751091,58.762431 -83.126357,62.387164 -78.861965,62.387164 C -74.597572,62.387164 -70.972839,58.762431 -70.972839,54.498038 C -70.972839,50.233647 -74.597572,46.608913 -78.861965,46.608913 L -78.861965,46.608913 z M -78.861965,60.681408 C -82.273479,60.681408 -85.045334,57.909553 -85.045334,54.498038 C -85.045334,51.086525 -82.273479,48.31467 -78.861965,48.31467 C -75.450451,48.31467 -72.678596,51.086525 -72.678596,54.498038 C -72.678596,57.909553 -75.450451,60.681408 -78.861965,60.681408 L -78.861965,60.681408 z "
id="path1917" />
<path
style="fill:url(#radialGradient5538);fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
d="M -78.861965,25.199314 C -83.126357,25.199314 -86.751091,28.824047 -86.751091,33.08844 C -86.751091,37.352831 -83.126357,40.977565 -78.861965,40.977565 C -74.597572,40.977565 -70.972839,37.352831 -70.972839,33.08844 C -70.972839,28.824047 -74.597572,25.199314 -78.861965,25.199314 L -78.861965,25.199314 z M -78.861965,39.271808 C -82.273479,39.271808 -85.045334,36.499953 -85.045334,33.08844 C -85.045334,29.676926 -82.273479,26.905071 -78.861965,26.905071 C -75.450451,26.905071 -72.678596,29.676926 -72.678596,33.08844 C -72.678596,36.499953 -75.66367,39.271808 -78.861965,39.271808 z "
id="path1952" />
<path
style="fill:url(#radialGradient5540);fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
d="M -58.092025,41.190784 C -53.827633,41.190784 -50.202899,37.566052 -50.202899,33.301659 C -50.202899,29.037267 -53.827633,25.412533 -58.092025,25.412533 C -62.356416,25.412533 -65.98115,29.037267 -65.98115,33.301659 C -65.98115,37.566052 -62.356416,41.190784 -58.092025,41.190784 z M -58.092025,27.11829 C -54.68051,27.11829 -51.908656,29.890145 -51.908656,33.301659 C -51.908656,36.713173 -54.68051,39.485028 -58.092025,39.485028 C -61.503539,39.485028 -64.275393,36.713173 -64.275393,33.301659 C -64.275393,29.890145 -61.503539,27.11829 -58.092025,27.11829 L -58.092025,27.11829 z "
id="path1987" />
<path
style="fill:url(#radialGradient5542);fill-rule:nonzero;stroke:#606060;stroke-width:0.99830979;stroke-miterlimit:4;stroke-opacity:1"
d="M -87.453541,43.899849 C -87.453541,54.34761 -78.924756,62.876395 -68.476995,62.876395 C -58.029234,62.876395 -49.500449,54.34761 -49.500449,43.899849 C -49.500449,33.452087 -58.029234,24.923303 -68.476995,24.923303 C -78.924756,24.923303 -87.453541,33.452087 -87.453541,43.899849 L -87.453541,43.899849 z M -75.939682,43.899849 C -75.939682,39.848676 -72.528167,36.437162 -68.476995,36.437162 C -64.425823,36.437162 -61.014308,39.848676 -61.014308,43.899849 C -61.014308,47.951021 -64.425823,51.362535 -68.476995,51.362535 C -72.528167,51.362535 -75.939682,47.951021 -75.939682,43.899849 z "
id="path2012" />
<path
sodipodi:nodetypes="cccccc"
style="fill:url(#radialGradient5544);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
d="M -84.883844,52.723884 L -75.536351,47.336095 C -74.538612,49.132025 -73.802921,49.773966 -72.144039,50.822157 L -76.702387,60.506246 C -79.695604,59.30896 -83.686558,55.318005 -84.883844,52.723884 L -84.883844,52.723884 z "
id="path2033" />
<path
sodipodi:nodetypes="cccccc"
style="fill:url(#radialGradient5546);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
d="M -59.511565,60.324218 L -64.93495,50.898568 C -63.304238,49.98294 -62.464893,49.112937 -61.469299,47.435433 L -51.632647,52.04732 C -52.844788,55.075455 -56.885259,59.112966 -59.511565,60.324218 L -59.511565,60.324218 z "
id="path2058" />
<path
sodipodi:nodetypes="ccccc"
style="fill:url(#radialGradient5548);fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
d="M -52.132645,35.064095 L -61.419592,40.399149 C -62.438815,38.683298 -63.291694,37.955419 -64.7787,37.04004 L -60.234024,27.357905 C -57.270105,28.543473 -53.318213,32.29777 -52.132645,35.064095 z "
id="path2081" />
<path
sodipodi:nodetypes="ccccc"
style="fill:url(#radialGradient5550);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
d="M -77.30103,27.493 L -71.913242,36.871743 C -73.709171,37.869482 -74.507362,38.605173 -75.399303,40.232805 L -85.083392,35.674457 C -83.886106,32.68124 -80.094699,28.690286 -77.30103,27.493 z "
id="path2098" />
<path
sodipodi:nodetypes="cccccc"
id="path3636"
d="M -86.476208,43.899847 C -86.476208,53.809524 -78.386675,61.899058 -68.476997,61.899058 C -58.567319,61.899058 -50.477785,53.809524 -50.477785,43.899847 C -50.477785,33.990168 -58.567319,25.900636 -68.476997,25.900636 C -78.386675,25.900636 -86.476208,33.990168 -86.476208,43.899847 L -86.476208,43.899847 z "
style="fill:none;fill-rule:nonzero;stroke:url(#linearGradient5552);stroke-width:1.16556895;stroke-miterlimit:4;stroke-opacity:1" />
<path
style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5554);stroke-width:1.16556895;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M -76.812037,43.899853 C -76.812037,48.488813 -73.065946,52.234903 -68.476987,52.234903 C -63.888027,52.234903 -60.141936,48.488813 -60.141936,43.899853 C -60.141936,39.310893 -63.888027,35.564803 -68.476987,35.564803 C -73.065946,35.564803 -76.812037,39.310893 -76.812037,43.899853 L -76.812037,43.899853 z "
id="path3638"
sodipodi:nodetypes="cccccc" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 27 KiB

View file

@ -0,0 +1,357 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="90.000000"
inkscape:export-xdpi="90.000000"
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
width="48px"
height="48px"
id="svg11300"
sodipodi:version="0.32"
inkscape:version="0.43+devel"
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/emblems"
sodipodi:docname="emblem-unreadable.svg">
<defs
id="defs3">
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6719"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
inkscape:collect="always"
id="linearGradient5060">
<stop
style="stop-color:black;stop-opacity:1;"
offset="0"
id="stop5062" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5064" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6717"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
id="linearGradient5048">
<stop
style="stop-color:black;stop-opacity:0;"
offset="0"
id="stop5050" />
<stop
id="stop5056"
offset="0.5"
style="stop-color:black;stop-opacity:1;" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5052" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient6715"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" />
<linearGradient
inkscape:collect="always"
id="linearGradient2719">
<stop
style="stop-color:#cc0000;stop-opacity:1;"
offset="0"
id="stop2721" />
<stop
style="stop-color:#cc0000;stop-opacity:0;"
offset="1"
id="stop2723" />
</linearGradient>
<linearGradient
id="linearGradient2711">
<stop
style="stop-color:#f34e4e;stop-opacity:1;"
offset="0"
id="stop2713" />
<stop
style="stop-color:#ef2929;stop-opacity:0;"
offset="1"
id="stop2715" />
</linearGradient>
<linearGradient
id="linearGradient11327">
<stop
style="stop-color:#7d6400;stop-opacity:1;"
offset="0"
id="stop11329" />
<stop
style="stop-color:#be9700;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop11331" />
</linearGradient>
<linearGradient
id="linearGradient2092">
<stop
id="stop2094"
offset="0"
style="stop-color:#fff7b0;stop-opacity:1;" />
<stop
style="stop-color:#ffec41;stop-opacity:1.0000000;"
offset="0.20999999"
id="stop2098" />
<stop
id="stop2293"
offset="0.83999997"
style="stop-color:#e2cc00;stop-opacity:1;" />
<stop
id="stop2100"
offset="1"
style="stop-color:#c3af00;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient11335">
<stop
style="stop-color:#6f716d;stop-opacity:1;"
offset="0"
id="stop11337" />
<stop
style="stop-color:#9ea09c;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop11339" />
</linearGradient>
<linearGradient
id="linearGradient10591">
<stop
style="stop-color:#cad0c6;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop10593" />
<stop
id="stop10599"
offset="0.50000000"
style="stop-color:#eaece9;stop-opacity:1.0000000;" />
<stop
style="stop-color:#c5cbc0;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop10595" />
</linearGradient>
<linearGradient
id="linearGradient11520">
<stop
id="stop11522"
offset="0.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop11524"
offset="1.0000000"
style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient11508"
inkscape:collect="always">
<stop
id="stop11510"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop11512"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient11508"
id="radialGradient1348"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,-1.435476e-15,29.48178)"
cx="30.203562"
cy="44.565483"
fx="30.203562"
fy="44.565483"
r="6.5659914" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient11520"
id="radialGradient1366"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
cx="24.445690"
cy="35.878170"
fx="24.445690"
fy="35.878170"
r="20.530962" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2719"
id="radialGradient2725"
cx="24.445681"
cy="46.957848"
fx="24.445681"
fy="46.957848"
r="16.554319"
gradientTransform="matrix(2.670835,-1.66183e-17,1.650931e-17,2.653312,-40.84471,-77.78951)"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
stroke="#eeeeec"
fill="#cc0000"
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.25490196"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="49.436623"
inkscape:cy="35.750047"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:showpageshadow="false"
inkscape:window-width="1002"
inkscape:window-height="955"
inkscape:window-x="436"
inkscape:window-y="77" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:title>Unreadable</dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>emblem</rdf:li>
<rdf:li>access</rdf:li>
<rdf:li>denied</rdf:li>
<rdf:li>unreadable</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
transform="matrix(2.304988e-2,0,0,2.086758e-2,45.00013,40.24675)"
id="g6707">
<rect
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect6709"
width="1339.6335"
height="478.35718"
x="-1559.2523"
y="-150.69685" />
<path
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
id="path6711"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
id="path6713"
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
<rect
ry="5.4548240"
rx="5.4548240"
y="3.5233452"
x="4.4147282"
height="40.061924"
width="40.061924"
id="rect11518"
style="opacity:1.0000000;color:#000000;fill:url(#radialGradient1366);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#9b9b9b;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
<rect
style="opacity:1.0000000;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
id="rect11528"
width="37.696587"
height="37.696587"
x="5.5973887"
y="4.7060070"
rx="4.2426391"
ry="4.2426391" />
<rect
style="opacity:1;color:#000000;fill:url(#radialGradient2725);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect2707"
width="33.108639"
height="32.891403"
x="7.8913612"
y="7.1085968"
rx="2.7440348"
ry="2.7440348"
inkscape:r_cx="true"
inkscape:r_cy="true" />
<g
id="g2703"
transform="matrix(0.717647,0,0,0.717647,6.882353,6.6)"
inkscape:r_cx="true"
inkscape:r_cy="true"
style="stroke:#eeeeec">
<path
inkscape:r_cy="true"
inkscape:r_cx="true"
id="path2698"
d="M 16.25,15.25 L 32.5,31.5"
style="opacity:1;color:#000000;fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:#eeeeec;stroke-width:6.96721315;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
<path
style="opacity:1;color:#000000;fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:#eeeeec;stroke-width:6.96721315;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
d="M 32.5,15.25 L 16.25,31.5"
id="path2700"
inkscape:r_cx="true"
inkscape:r_cy="true" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

BIN
design/icons/language.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View file

@ -0,0 +1,298 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="90.000000"
inkscape:export-xdpi="90.000000"
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
width="48px"
height="48px"
id="svg11300"
sodipodi:version="0.32"
inkscape:version="0.43+devel"
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/emblems"
sodipodi:docname="emblem-readonly.svg">
<defs
id="defs3">
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6719"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
inkscape:collect="always"
id="linearGradient5060">
<stop
style="stop-color:black;stop-opacity:1;"
offset="0"
id="stop5062" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5064" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6717"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
id="linearGradient5048">
<stop
style="stop-color:black;stop-opacity:0;"
offset="0"
id="stop5050" />
<stop
id="stop5056"
offset="0.5"
style="stop-color:black;stop-opacity:1;" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5052" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient6715"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" />
<linearGradient
id="linearGradient11327">
<stop
style="stop-color:#7d6400;stop-opacity:1;"
offset="0"
id="stop11329" />
<stop
style="stop-color:#be9700;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop11331" />
</linearGradient>
<linearGradient
id="linearGradient2092">
<stop
id="stop2094"
offset="0"
style="stop-color:#fff7b0;stop-opacity:1;" />
<stop
style="stop-color:#ffec41;stop-opacity:1.0000000;"
offset="0.20999999"
id="stop2098" />
<stop
id="stop2293"
offset="0.83999997"
style="stop-color:#e2cc00;stop-opacity:1;" />
<stop
id="stop2100"
offset="1"
style="stop-color:#c3af00;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient11335">
<stop
style="stop-color:#6f716d;stop-opacity:1;"
offset="0"
id="stop11337" />
<stop
style="stop-color:#9ea09c;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop11339" />
</linearGradient>
<linearGradient
id="linearGradient10591">
<stop
style="stop-color:#cad0c6;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop10593" />
<stop
id="stop10599"
offset="0.50000000"
style="stop-color:#eaece9;stop-opacity:1.0000000;" />
<stop
style="stop-color:#c5cbc0;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop10595" />
</linearGradient>
<linearGradient
id="linearGradient11520">
<stop
id="stop11522"
offset="0.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop11524"
offset="1.0000000"
style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient11508"
inkscape:collect="always">
<stop
id="stop11510"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop11512"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient11508"
id="radialGradient1348"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,-1.435476e-15,29.48178)"
cx="30.203562"
cy="44.565483"
fx="30.203562"
fy="44.565483"
r="6.5659914" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient11520"
id="radialGradient1366"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
cx="24.445690"
cy="35.878170"
fx="24.445690"
fy="35.878170"
r="20.530962" />
</defs>
<sodipodi:namedview
stroke="#ef2929"
fill="#729fcf"
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.25490196"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="24.194962"
inkscape:cy="-13.983676"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:showpageshadow="false"
inkscape:window-width="872"
inkscape:window-height="707"
inkscape:window-x="155"
inkscape:window-y="230" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:title>Read Only Emblem</dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>emblem</rdf:li>
<rdf:li>read-only</rdf:li>
<rdf:li>nowrite</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
transform="matrix(2.243788e-2,0,0,2.086758e-2,44.06795,40.547)"
id="g6707">
<rect
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect6709"
width="1339.6335"
height="478.35718"
x="-1559.2523"
y="-150.69685" />
<path
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
id="path6711"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
id="path6713"
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
<rect
ry="5.4548240"
rx="5.4548240"
y="3.5233452"
x="4.4147282"
height="40.061924"
width="40.061924"
id="rect11518"
style="opacity:1.0000000;color:#000000;fill:url(#radialGradient1366);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#9b9b9b;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
<rect
style="opacity:1.0000000;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
id="rect11528"
width="37.696587"
height="37.696587"
x="5.5973887"
y="4.7060070"
rx="4.2426391"
ry="4.2426391" />
<path
style="opacity:0.69886361;color:#000000;fill:#888a85;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
d="M 23.906254,10.878347 C 19.835833,11.005873 17.137508,12.963117 17.137508,17.000087 L 17.137508,21.120489 L 16.221429,21.120489 C 15.54928,21.120489 15,21.583436 15,22.163203 L 15,32.993974 C 15,33.573741 15.54928,34.036689 16.221429,34.036688 L 32.795528,34.036688 C 33.467687,34.036688 34,33.57374 34,32.993974 L 34,22.163203 C 34,21.583437 33.467687,21.120489 32.795528,21.120489 L 31.862492,21.120489 L 31.87946,17.067359 C 31.87946,12.782023 28.950269,10.931241 24.516968,10.878347 C 24.310278,10.875868 24.10644,10.872076 23.906254,10.878347 z M 24.313392,13.58604 C 24.388241,13.584353 24.4735,13.58604 24.550894,13.58604 C 29.469737,13.58604 29.092541,17.084436 29.165175,18.126891 L 29.165175,21.120489 L 19.902675,21.120489 L 19.902675,18.143709 C 19.885214,17.109531 19.597992,13.692412 24.313392,13.58604 z "
id="path2086"
inkscape:r_cx="true"
inkscape:r_cy="true" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 150 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 141 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 50 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 779 KiB

View file

@ -0,0 +1,828 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="90.000000"
inkscape:export-xdpi="90.000000"
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
width="48px"
height="48px"
id="svg11300"
sodipodi:version="0.32"
inkscape:version="0.43+devel"
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/apps"
sodipodi:docname="preferences-desktop-locale.svg">
<defs
id="defs3">
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6719"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
inkscape:collect="always"
id="linearGradient5060">
<stop
style="stop-color:black;stop-opacity:1;"
offset="0"
id="stop5062" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5064" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6717"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
id="linearGradient5048">
<stop
style="stop-color:black;stop-opacity:0;"
offset="0"
id="stop5050" />
<stop
id="stop5056"
offset="0.5"
style="stop-color:black;stop-opacity:1;" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5052" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient6715"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" />
<linearGradient
inkscape:collect="always"
id="linearGradient3289">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3291" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3293" />
</linearGradient>
<linearGradient
id="linearGradient16542">
<stop
style="stop-color:#2e3436;stop-opacity:1;"
offset="0"
id="stop16544" />
<stop
id="stop16550"
offset="0.27272728"
style="stop-color:#505a5d;stop-opacity:1;" />
<stop
style="stop-color:#141717;stop-opacity:1;"
offset="0.63636363"
id="stop16554" />
<stop
style="stop-color:#2e3436;stop-opacity:1;"
offset="1"
id="stop16546" />
</linearGradient>
<linearGradient
id="linearGradient16532">
<stop
style="stop-color:#cc0000;stop-opacity:1;"
offset="0"
id="stop16534" />
<stop
id="stop16540"
offset="0.24242425"
style="stop-color:#ff4747;stop-opacity:1;" />
<stop
style="stop-color:#9b1212;stop-opacity:1;"
offset="0.6097337"
id="stop16552" />
<stop
style="stop-color:#cc0000;stop-opacity:1;"
offset="1"
id="stop16536" />
</linearGradient>
<linearGradient
id="linearGradient16522">
<stop
style="stop-color:#edd400;stop-opacity:1;"
offset="0"
id="stop16524" />
<stop
id="stop16530"
offset="0.27272728"
style="stop-color:#fff491;stop-opacity:1;" />
<stop
style="stop-color:#edd400;stop-opacity:1;"
offset="1"
id="stop16526" />
</linearGradient>
<linearGradient
id="linearGradient16514">
<stop
id="stop16516"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
style="stop-color:#bebebe;stop-opacity:1;"
offset="0.42424244"
id="stop16518" />
<stop
id="stop16520"
offset="1"
style="stop-color:#ebebeb;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient16494">
<stop
style="stop-color:#204a87;stop-opacity:1;"
offset="0"
id="stop16496" />
<stop
id="stop16502"
offset="0.21212122"
style="stop-color:#3f7bd2;stop-opacity:1;" />
<stop
style="stop-color:#204a87;stop-opacity:1;"
offset="1"
id="stop16498" />
</linearGradient>
<linearGradient
id="linearGradient16468">
<stop
style="stop-color:#cc0000;stop-opacity:1;"
offset="0"
id="stop16470" />
<stop
id="stop16476"
offset="0.15151516"
style="stop-color:#ff3737;stop-opacity:1;" />
<stop
style="stop-color:#b41414;stop-opacity:1;"
offset="0.57575756"
id="stop16478" />
<stop
style="stop-color:#ff4c4c;stop-opacity:1;"
offset="1"
id="stop16472" />
</linearGradient>
<linearGradient
id="linearGradient16451">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop16453" />
<stop
id="stop16459"
offset="0.42424244"
style="stop-color:#bebebe;stop-opacity:1;" />
<stop
style="stop-color:#ebebeb;stop-opacity:1;"
offset="1"
id="stop16455" />
</linearGradient>
<linearGradient
id="linearGradient11520">
<stop
id="stop11522"
offset="0.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop11524"
offset="1.0000000"
style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient11508"
inkscape:collect="always">
<stop
id="stop11510"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop11512"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient11494"
inkscape:collect="always">
<stop
id="stop11496"
offset="0"
style="stop-color:#ef2929;stop-opacity:1;" />
<stop
id="stop11498"
offset="1"
style="stop-color:#ef2929;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient11415">
<stop
id="stop11417"
offset="0.0000000"
style="stop-color:#204a87;stop-opacity:0.0000000;" />
<stop
style="stop-color:#204a87;stop-opacity:1.0000000;"
offset="0.50000000"
id="stop11423" />
<stop
id="stop11419"
offset="1"
style="stop-color:#204a87;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient11399"
inkscape:collect="always">
<stop
id="stop11401"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop11403"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
gradientTransform="translate(-60.28571,-0.285714)"
y2="34.462429"
x2="43.615788"
y1="3.7744560"
x1="15.828360"
gradientUnits="userSpaceOnUse"
id="linearGradient11425"
xlink:href="#linearGradient11415"
inkscape:collect="always" />
<linearGradient
gradientTransform="translate(-60.57143,0.000000)"
y2="39.033859"
x2="35.679932"
y1="9.3458843"
x1="9.6957054"
gradientUnits="userSpaceOnUse"
id="linearGradient11427"
xlink:href="#linearGradient11415"
inkscape:collect="always" />
<linearGradient
y2="33.462429"
x2="26.758644"
y1="19.774456"
x1="13.267134"
gradientTransform="translate(-60.85714,0.428571)"
gradientUnits="userSpaceOnUse"
id="linearGradient11439"
xlink:href="#linearGradient11415"
inkscape:collect="always" />
<radialGradient
r="8.5000000"
fy="39.142857"
fx="12.071428"
cy="39.142857"
cx="12.071428"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.487395,0.000000,20.06483)"
gradientUnits="userSpaceOnUse"
id="radialGradient11441"
xlink:href="#linearGradient11399"
inkscape:collect="always" />
<radialGradient
gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
gradientUnits="userSpaceOnUse"
r="3.8335034"
fy="15.048258"
fx="27.577173"
cy="15.048258"
cx="27.577173"
id="radialGradient11500"
xlink:href="#linearGradient11494"
inkscape:collect="always" />
<radialGradient
r="3.8335034"
fy="16.049133"
fx="27.577173"
cy="16.049133"
cx="27.577173"
gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
gradientUnits="userSpaceOnUse"
id="radialGradient11504"
xlink:href="#linearGradient11494"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,2.166583e-14,29.48178)"
r="6.5659914"
fy="44.565483"
fx="30.203562"
cy="44.565483"
cx="30.203562"
id="radialGradient11514"
xlink:href="#linearGradient11508"
inkscape:collect="always" />
<radialGradient
gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
gradientUnits="userSpaceOnUse"
r="20.530962"
fy="35.878170"
fx="24.445690"
cy="35.878170"
cx="24.445690"
id="radialGradient11526"
xlink:href="#linearGradient11520"
inkscape:collect="always" />
<radialGradient
r="6.5659914"
fy="44.565483"
fx="30.203562"
cy="44.565483"
cx="30.203562"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,3.185827e-15,29.48178)"
gradientUnits="userSpaceOnUse"
id="radialGradient11532"
xlink:href="#linearGradient11508"
inkscape:collect="always" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient11508"
id="radialGradient1348"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,-1.353344e-14,29.48178)"
cx="30.203562"
cy="44.565483"
fx="30.203562"
fy="44.565483"
r="6.5659914" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient11520"
id="radialGradient1350"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
cx="24.445690"
cy="35.878170"
fx="24.445690"
fy="35.878170"
r="20.530962" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient11494"
id="radialGradient1352"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
cx="27.577173"
cy="16.049133"
fx="27.577173"
fy="16.049133"
r="3.8335034" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient11494"
id="radialGradient1354"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
cx="27.577173"
cy="15.048258"
fx="27.577173"
fy="15.048258"
r="3.8335034" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient11508"
id="radialGradient1356"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,2.220359e-14,29.48178)"
cx="30.203562"
cy="44.565483"
fx="30.203562"
fy="44.565483"
r="6.5659914" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient11520"
id="radialGradient1366"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.049266,-1.696401e-32,0.000000,2.049266,-25.65002,-37.31089)"
cx="24.445690"
cy="35.878170"
fx="24.445690"
fy="35.878170"
r="20.530962" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16451"
id="linearGradient16457"
x1="0.91421354"
y1="16.710525"
x2="37.623106"
y2="16.710525"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16451"
id="linearGradient16464"
gradientUnits="userSpaceOnUse"
x1="0.91421354"
y1="16.710525"
x2="37.623106"
y2="16.710525"
gradientTransform="matrix(0.98006,0,0,1,0.116103,0)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16468"
id="linearGradient16474"
x1="2"
y1="23.791154"
x2="36"
y2="23.791154"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16468"
id="linearGradient16482"
gradientUnits="userSpaceOnUse"
x1="2"
y1="23.791154"
x2="36"
y2="23.791154"
gradientTransform="translate(0,-5.624133)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16468"
id="linearGradient16486"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,-11.24827)"
x1="2"
y1="23.791154"
x2="36"
y2="23.791154" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16468"
id="linearGradient16490"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,-16.8724)"
x1="2"
y1="23.791154"
x2="36"
y2="23.791154" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16494"
id="linearGradient16500"
x1="2"
y1="8.5017858"
x2="19"
y2="8.5017858"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16522"
id="linearGradient16528"
x1="11.002116"
y1="29.756583"
x2="46.998972"
y2="29.756583"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16532"
id="linearGradient16538"
x1="11.976621"
y1="29.748671"
x2="46.138718"
y2="29.748671"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16542"
id="linearGradient16548"
x1="11.976621"
y1="21.723522"
x2="46.138718"
y2="21.723522"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16522"
id="linearGradient16562"
gradientUnits="userSpaceOnUse"
x1="11.002116"
y1="29.756583"
x2="46.998972"
y2="29.756583" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16542"
id="linearGradient16564"
gradientUnits="userSpaceOnUse"
x1="11.976621"
y1="21.723522"
x2="46.138718"
y2="21.723522" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16532"
id="linearGradient16566"
gradientUnits="userSpaceOnUse"
x1="11.976621"
y1="29.748671"
x2="46.138718"
y2="29.748671" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16451"
id="linearGradient16577"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.98006,0,0,1,0.116103,0)"
x1="0.91421354"
y1="16.710525"
x2="37.623106"
y2="16.710525" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16468"
id="linearGradient16579"
gradientUnits="userSpaceOnUse"
x1="2"
y1="23.791154"
x2="36"
y2="23.791154" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16468"
id="linearGradient16581"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,-11.24827)"
x1="2"
y1="23.791154"
x2="36"
y2="23.791154" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16468"
id="linearGradient16583"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,-5.624133)"
x1="2"
y1="23.791154"
x2="36"
y2="23.791154" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16468"
id="linearGradient16585"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,-16.8724)"
x1="2"
y1="23.791154"
x2="36"
y2="23.791154" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient16494"
id="linearGradient16587"
gradientUnits="userSpaceOnUse"
x1="2"
y1="8.5017858"
x2="19"
y2="8.5017858" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3289"
id="linearGradient3295"
x1="29.017775"
y1="40.347282"
x2="29.017775"
y2="17.189533"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient6761"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6763"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6765"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
</defs>
<sodipodi:namedview
stroke="#ef2929"
fill="#edd400"
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.25490196"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="70.23153"
inkscape:cy="24.653308"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:showpageshadow="false"
inkscape:window-width="872"
inkscape:window-height="659"
inkscape:window-x="612"
inkscape:window-y="466" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:title>Locale Preferences</dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>locale preferences</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="g6753"
transform="matrix(1.971468e-2,0,0,3.343226e-2,38.92492,24.71253)">
<rect
y="-150.69685"
x="-1559.2523"
height="478.35718"
width="1339.6335"
id="rect6755"
style="opacity:0.40206185;color:black;fill:url(#linearGradient6761);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
sodipodi:nodetypes="cccc"
id="path6757"
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
style="opacity:0.40206185;color:black;fill:url(#radialGradient6763);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
style="opacity:0.40206185;color:black;fill:url(#radialGradient6765);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
id="path6759"
sodipodi:nodetypes="cccc" />
</g>
<g
transform="matrix(1.971468e-2,0,0,3.343226e-2,46.17276,35.14236)"
id="g6707">
<rect
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect6709"
width="1339.6335"
height="478.35718"
x="-1559.2523"
y="-150.69685" />
<path
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
id="path6711"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
id="path6713"
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
<g
id="g16568"
transform="translate(2.121318,2.032932)">
<path
sodipodi:nodetypes="ccccc"
id="rect15576"
d="M 1.5021165,4.1593795 C 10.684459,-2.3813582 27.143377,6.1039232 36.498972,4.1593795 L 36.498972,29.261671 C 27.489881,32.266875 11.897222,22.89771 1.5021165,29.261671 L 1.5021165,4.1593795 z "
style="color:#000000;fill:url(#linearGradient16577);fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
<path
sodipodi:nodetypes="ccccc"
id="path16466"
d="M 2,26 C 11.0625,19.9375 29.8125,29.25 36,26 L 36,23 C 29.3125,26.4375 11,16.8125 2,23 L 2,26 z "
style="opacity:1;color:#000000;fill:url(#linearGradient16579);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
<path
sodipodi:nodetypes="ccccc"
id="path16484"
d="M 2,14.751733 C 11.0625,8.6892331 29.8125,18.001733 36,14.751733 L 36,11.751733 C 29.3125,15.189233 11,5.5642331 2,11.751733 L 2,14.751733 z "
style="opacity:1;color:#000000;fill:url(#linearGradient16581);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
<path
style="opacity:1;color:#000000;fill:url(#linearGradient16583);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
d="M 2,20.375867 C 11.0625,14.313367 29.8125,23.625867 36,20.375867 L 36,17.375867 C 29.3125,20.813367 11,11.188367 2,17.375867 L 2,20.375867 z "
id="path16480"
sodipodi:nodetypes="ccccc" />
<path
style="opacity:1;color:#000000;fill:url(#linearGradient16585);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
d="M 2,9.1276014 C 11.0625,3.0651012 29.8125,12.377601 36,9.1276014 L 36,6.1276014 C 29.3125,9.5651014 11,-0.059898803 2,6.1276014 L 2,9.1276014 z "
id="path16488"
sodipodi:nodetypes="ccccc" />
<path
style="opacity:0.5;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
d="M 2.4999999,4.7703293 C 10.477148,-0.95790769 26.333595,6.7148733 35.535549,5.2703293 L 35.410549,28.560121 C 28.595705,30.752825 12.672841,22.855685 2.5624999,27.435121 L 2.4999999,4.7703293 z "
id="path16462"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:nodetypes="ccccc"
id="path16492"
d="M 2,4.4999999 C 2,4.4999999 2,14.875 2,14.875 C 4.125,13 9.8125,11.625 19,13.5 L 19,3 C 15.375,2.125 5.5,1.0624999 2,4.4999999 z "
style="opacity:1;color:#000000;fill:url(#linearGradient16587);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
</g>
<g
id="g16556"
transform="translate(-0.972274,-1.06066)">
<path
style="color:#000000;fill:url(#linearGradient16562);fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
d="M 11.502116,18.15938 C 20.684459,11.618642 37.143377,20.103923 46.498972,18.15938 L 46.498972,43.261671 C 37.489881,46.266875 21.897222,36.89771 11.502116,43.261671 L 11.502116,18.15938 z "
id="path16504"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:nodetypes="ccccc"
id="path16510"
d="M 11.976621,18.478292 L 12.020815,26.61002 C 19.975766,21.612175 38.890874,29.350058 46.05033,26.963573 L 46.05033,18.522486 C 38.095378,20.599612 19.666407,12.202719 11.976621,18.478292 z "
style="opacity:1;color:#000000;fill:url(#linearGradient16564);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
<path
style="opacity:1;color:#000000;fill:url(#linearGradient16566);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
d="M 11.976621,26.61002 L 12.020815,34.564971 C 20.682873,27.759068 37.476659,38.719223 46.050329,35.095301 L 46.050329,26.830991 C 37.918601,29.084894 20.73963,19.831845 11.976621,26.61002 z "
id="path16512"
sodipodi:nodetypes="ccccc" />
<path
sodipodi:nodetypes="ccccc"
id="path16506"
d="M 12.5,18.681941 C 20.477148,12.953704 36.333595,20.626485 45.535549,19.181941 L 45.410549,42.560121 C 38.595705,44.752825 22.672841,36.855685 12.5625,41.435121 L 12.5,18.681941 z "
style="opacity:0.62921348;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3295);stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 32 KiB

View file

@ -0,0 +1,396 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="90.000000"
inkscape:export-xdpi="90.000000"
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
width="48px"
height="48px"
id="svg11300"
sodipodi:version="0.32"
inkscape:version="0.43+devel"
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/categories"
sodipodi:docname="preferences-system.svg">
<defs
id="defs3">
<linearGradient
inkscape:collect="always"
id="linearGradient2250">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2252" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2254" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2265">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop2267" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop2269" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2257">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2259" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2261" />
</linearGradient>
<linearGradient
id="linearGradient3087">
<stop
style="stop-color:#3465a4;stop-opacity:1;"
offset="0"
id="stop3089" />
<stop
id="stop3095"
offset="0"
style="stop-color:#9fbce1;stop-opacity:1;" />
<stop
style="stop-color:#6b95ca;stop-opacity:1;"
offset="0"
id="stop2242" />
<stop
id="stop2244"
offset="0.75"
style="stop-color:#3d6aa5;stop-opacity:1;" />
<stop
style="stop-color:#386eb4;stop-opacity:1;"
offset="1"
id="stop3091" />
</linearGradient>
<linearGradient
id="linearGradient3077">
<stop
style="stop-color:#98a0a9;stop-opacity:1;"
offset="0"
id="stop3079" />
<stop
style="stop-color:#c3d0dd;stop-opacity:1;"
offset="1"
id="stop3081" />
</linearGradient>
<linearGradient
id="linearGradient3061">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3063" />
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop3065" />
</linearGradient>
<linearGradient
id="linearGradient3049">
<stop
style="stop-color:#b6b6b6;stop-opacity:1;"
offset="0"
id="stop3051" />
<stop
id="stop2262"
offset="0.5"
style="stop-color:#f2f2f2;stop-opacity:1;" />
<stop
style="stop-color:#fafafa;stop-opacity:1;"
offset="0.67612958"
id="stop2264" />
<stop
id="stop2268"
offset="0.84051722"
style="stop-color:#d8d8d8;stop-opacity:1;" />
<stop
id="stop2266"
offset="0.875"
style="stop-color:#f2f2f2;stop-opacity:1;" />
<stop
style="stop-color:#dbdbdb;stop-opacity:1;"
offset="1"
id="stop3053" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3041">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3043" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop3045" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3041"
id="radialGradient3047"
cx="24.8125"
cy="39.125"
fx="24.8125"
fy="39.125"
r="17.6875"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.374558,7.194333e-15,24.47041)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3049"
id="linearGradient3055"
x1="19.648342"
y1="42.253601"
x2="20.631224"
y2="6.7758031"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.878270,0.000000,0.000000,0.878270,2.536988,4.967681)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3061"
id="linearGradient3067"
x1="50.152931"
y1="-3.6324477"
x2="25.291086"
y2="-4.3002653"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.878270,-1.375944e-15,1.375944e-15,0.878270,5.328299,1.650243)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3077"
id="linearGradient3083"
x1="38.227654"
y1="13.602527"
x2="37.53537"
y2="6.6285896"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.878270,0.000000,0.000000,0.878270,2.847503,5.588712)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3087"
id="linearGradient3093"
x1="9.7503242"
y1="32.28376"
x2="16.915297"
y2="39.443218"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.878270,0.000000,0.000000,0.878270,2.536988,4.967681)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2257"
id="linearGradient2263"
x1="12.004697"
y1="35.688461"
x2="10.650805"
y2="33.194965"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.007254,-2.636526e-2,2.636526e-2,1.007254,1.593411,7.919100e-2)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2265"
id="linearGradient2271"
x1="14.017542"
y1="36.942543"
x2="15.415793"
y2="38.268368"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.878099,-1.732370e-2,1.732370e-2,0.878099,2.163687,4.067899)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2250"
id="linearGradient2256"
x1="31.177404"
y1="19.821514"
x2="40.859177"
y2="9.6568537"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3041"
id="radialGradient2260"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.374558,7.272829e-15,24.47041)"
cx="24.8125"
cy="39.125"
fx="24.8125"
fy="39.125"
r="17.6875" />
</defs>
<sodipodi:namedview
stroke="#204a87"
fill="#3465a4"
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.25490196"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="4"
inkscape:cx="19.425317"
inkscape:cy="26.37487"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:showpageshadow="false"
inkscape:window-width="1034"
inkscape:window-height="1010"
inkscape:window-x="296"
inkscape:window-y="83" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:title>Preferences System</dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>preferences</rdf:li>
<rdf:li>settings</rdf:li>
<rdf:li>control panel</rdf:li>
<rdf:li>tweaks</rdf:li>
<rdf:li>system</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
transform="matrix(0.751118,0.000000,0.000000,0.578703,17.04087,19.36341)"
d="M 42.5 39.125 A 17.6875 6.625 0 1 1 7.125,39.125 A 17.6875 6.625 0 1 1 42.5 39.125 z"
sodipodi:ry="6.625"
sodipodi:rx="17.6875"
sodipodi:cy="39.125"
sodipodi:cx="24.8125"
id="path2258"
style="opacity:0.19886367;color:#000000;fill:url(#radialGradient2260);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
style="opacity:0.3125;color:#000000;fill:url(#radialGradient3047);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="path3039"
sodipodi:cx="24.8125"
sodipodi:cy="39.125"
sodipodi:rx="17.6875"
sodipodi:ry="6.625"
d="M 42.5 39.125 A 17.6875 6.625 0 1 1 7.125,39.125 A 17.6875 6.625 0 1 1 42.5 39.125 z"
transform="matrix(0.836071,0.000000,0.000000,0.685436,-7.959607,15.71781)" />
<path
style="opacity:1;color:#000000;fill:url(#linearGradient3055);fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 17.906713,21.215676 L 36.899302,40.6474 C 37.667788,41.52567 40.102812,42.204461 41.729787,40.6474 C 43.300913,39.143787 42.937408,37.024536 41.400436,35.487563 L 23.176333,15.946056 C 25.426333,9.696056 20.872444,4.446488 14.997444,5.571488 L 13.73493,6.7242174 L 17.687145,10.456865 L 17.906713,13.750381 L 14.955871,16.443984 L 11.429472,16.05584 L 7.8066086,12.652544 C 7.8066086,12.652544 6.5364873,13.907448 6.5364873,13.907448 C 5.9457238,19.548765 11.844213,24.590676 17.906713,21.215676 z "
id="path2140"
sodipodi:nodetypes="cczcccccccccsc" />
<path
sodipodi:nodetypes="cczccccccccccc"
id="path3057"
d="M 18.117385,19.9401 L 37.320267,39.967712 C 37.915174,40.647605 39.800194,41.173077 41.059681,39.967712 C 42.275934,38.803723 41.994534,37.163152 40.804721,35.973338 L 22.313189,16.352183 C 23.813189,9.852183 20.454401,6.3475455 15.454401,6.4725455 L 15.18427,6.7459223 L 18.787193,9.982189 L 18.917359,14.163983 L 15.303442,17.462466 L 11.061136,17.004257 L 7.8845536,14.012776 L 7.5319165,14.442835 C 7.2194165,20.411585 14.023635,23.1276 18.117385,19.9401 z "
style="opacity:0.42613639;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999917;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<rect
style="opacity:0.17045456;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3067);stroke-width:0.9999972;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect3059"
width="23.268276"
height="2.0554912"
x="28.185335"
y="-2.6184492"
rx="0.88388073"
ry="0.88388073"
transform="matrix(0.697938,0.716158,-0.716158,0.697938,0.000000,0.000000)" />
<path
style="opacity:1;color:#000000;fill:url(#linearGradient3083);fill-opacity:1;fill-rule:nonzero;stroke:#878f9d;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 22.498794,30.12538 C 23.332335,29.410917 35.782628,16.676871 35.782628,16.676871 L 38.856573,16.457303 L 43.687058,9.7604906 L 39.662731,6.1752987 L 33.405057,11.554705 L 33.405057,14.628651 L 20.670142,27.857593 C 20.066332,28.461403 21.730308,30.784082 22.498794,30.12538 z "
id="path2144"
sodipodi:nodetypes="ccccccccc" />
<path
sodipodi:nodetypes="ccccccccc"
id="path3085"
d="M 22.401987,29.085455 C 23.04876,28.531078 35.426388,15.855648 35.426388,15.855648 L 38.354971,15.607649 L 42.568887,9.945584 L 39.679156,7.3965946 L 34.202578,12.114067 L 34.357836,14.965022 L 21.681731,28.257345 C 21.213213,28.725863 21.805692,29.596565 22.401987,29.085455 z "
style="opacity:0.53977272;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2256);stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
style="color:#000000;fill:url(#linearGradient3093);fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
d="M 8.4653111,43.611561 C 9.7818986,45.07679 13.438996,45.739726 15.060755,42.901647 C 15.767862,41.664211 17.154698,38.198845 23.341883,32.630379 C 24.381029,31.696208 25.481792,29.559241 24.54863,28.406512 L 22.133387,25.991269 C 21.145334,24.893432 18.398973,25.40552 17.272212,26.942145 C 13.913455,31.538339 8.4261393,35.197025 7.1887023,35.638967 C 4.8207828,36.484652 5.0872917,39.975116 6.6538792,41.635454 L 8.4653111,43.611561 z "
id="path2142"
sodipodi:nodetypes="ccccccscc" />
<path
sodipodi:type="arc"
style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#a1a1a1;stroke-width:1.13860166;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="path2146"
sodipodi:cx="41.875"
sodipodi:cy="37.5"
sodipodi:rx="1.375"
sodipodi:ry="1.375"
d="M 43.25 37.5 A 1.375 1.375 0 1 1 40.5,37.5 A 1.375 1.375 0 1 1 43.25 37.5 z"
transform="matrix(0.878270,0.000000,0.000000,0.878270,2.427204,5.077464)" />
<path
sodipodi:type="arc"
style="opacity:0.60227272;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="path3101"
sodipodi:cx="19.003494"
sodipodi:cy="28.20101"
sodipodi:rx="1.767767"
sodipodi:ry="1.767767"
d="M 20.771261 28.20101 A 1.767767 1.767767 0 1 1 17.235727,28.20101 A 1.767767 1.767767 0 1 1 20.771261 28.20101 z"
transform="matrix(0.570876,0.000000,0.000000,0.570876,9.154848,11.25111)" />
<path
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2263);stroke-width:2.29450917;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 18.678905,29.624807 C 18.678905,29.624807 11.509014,36.92442 8.1502573,38.161857"
id="path3103"
sodipodi:nodetypes="cc" />
<path
sodipodi:nodetypes="csccccscc"
id="path2270"
d="M 8.8060013,42.48669 C 10.247267,44.232307 13.405535,44.647919 14.397161,42.116101 C 15.078468,40.376589 17.730783,36.450314 22.594745,32.072748 C 23.411654,31.338363 24.277003,29.658419 23.543411,28.752218 L 21.644704,26.853511 C 20.867961,25.990463 18.708951,26.393033 17.823164,27.601028 C 15.182728,31.214257 9.3398194,35.940582 7.9274145,36.406654 C 5.7406198,37.128264 6.1504221,39.627953 7.3819713,40.933203 L 8.8060013,42.48669 z "
style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;opacity:0.19886364" />
<path
style="opacity:0.27840911;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2271);stroke-width:2.29450917;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 20.824602,31.261024 C 20.824602,31.261024 13.501839,37.878429 11.910849,42.121069"
id="path2247"
sodipodi:nodetypes="cc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 80 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 48 KiB

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
<svg
xml:space="preserve"
width="24pt"
height="24pt"
viewBox="0 0 507.946 507.946"
id="svg49"
sodipodi:version="0.31.1"
sodipodi:docname="/home/cschalle/spherecrystal/SphereCrystal/icons/scalable/stock/help.svg"
sodipodi:docbase="/home/cschalle/spherecrystal/SphereCrystal/icons/scalable/stock/"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs
id="defs62">
<radialGradient
id="aigrd1"
cx="218.9404"
cy="219.7715"
r="150.7063"
fx="218.9404"
fy="219.7715"
gradientUnits="userSpaceOnUse"
style="stroke:#000000;stroke-opacity:0.986014;stroke-width:0.981612;">
<stop
offset="0"
style="stop-color:#73ffff;stroke:#000000;stroke-opacity:0.986014;stroke-width:0.981612;"
id="stop53" />
<stop
offset="0.2809"
style="stop-color:#2EA6B9;stroke:#000000;stroke-opacity:0.986014;stroke-width:0.981612;"
id="stop54" />
<stop
offset="1"
style="stop-color:#006b8b;stroke:#000000;stroke-opacity:0.986014;stroke-width:0.981612;"
id="stop55" />
</radialGradient>
</defs>
<sodipodi:namedview
id="base" />
<path
style="font-size:12;stroke:none;stroke-width:0.979268;stroke-opacity:0.986014;fill:#a4c9ee;fill-opacity:0.7;"
d="M134.757,263.776c0,66.739,54.298,121.04,121.039,121.04c66.739,0,121.039-54.301,121.039-121.04c0-66.741-54.3-121.039-121.039-121.039c-66.741,0-121.039,54.298-121.039,121.039z"
id="path51"
transform="matrix(2.02625,0,0,2.03038,-263.417,-279.103)" />
<path
style="font-size:12;fill:url(#aigrd1);fill-rule:evenodd;stroke:#1c6671;stroke-width:7.73106;stroke-opacity:0.988235;"
d="M356.643,263.366c0,57.027-46.23,103.257-103.256,103.257c-57.027,0-103.256-46.229-103.256-103.257c0-57.027,46.229-103.256,103.256-103.256 c57.025,0,103.256,46.229,103.256,103.256z"
id="path56"
transform="matrix(2.18599,0,0,2.17069,-298.588,-314.939)" />
<path
d="M243.23,133.176c-0.09-2.664,1.26-4.104,4.05-4.104c2.376,0,3.906,1.242,3.906,3.258c0,1.224-0.414,2.016-1.854,3.222c-1.224,1.026-1.548,1.584-1.529,2.394v0.378h-1.314c-0.126-1.062,0.145-2.016,0.811-2.718c1.764-1.89,2.321-2.232,2.321-3.204 c0-1.134-0.863-2.034-2.357-2.034c-1.638,0-2.538,0.918-2.466,2.808h-1.566z M246.236,141.978v-1.962h1.782v1.962h-1.782z"
id="path249"
style="font-size:12;stroke:#0c6772;stroke-opacity:0.988235;stroke-width:0.532547;fill:#ffffff;fill-opacity:0.99;"
transform="matrix(37.6767,0.405146,0,29.1071,-9057.92,-3782.63)" />
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -0,0 +1,362 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="90.000000"
inkscape:export-xdpi="90.000000"
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
width="48px"
height="48px"
id="svg11300"
sodipodi:version="0.32"
inkscape:version="0.43+devel"
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/actions"
sodipodi:docname="system-log-out.svg">
<defs
id="defs3">
<linearGradient
id="linearGradient9896">
<stop
id="stop9898"
offset="0"
style="stop-color:#cecece;stop-opacity:1;" />
<stop
id="stop9900"
offset="1.0000000"
style="stop-color:#9e9e9e;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient9888"
inkscape:collect="always">
<stop
id="stop9890"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop9892"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient9880"
inkscape:collect="always">
<stop
id="stop9882"
offset="0"
style="stop-color:#525252;stop-opacity:1;" />
<stop
id="stop9884"
offset="1"
style="stop-color:#525252;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient9868">
<stop
style="stop-color:#4e4e4e;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop9870" />
<stop
style="stop-color:#616161;stop-opacity:0.0000000;"
offset="1.0000000"
id="stop9872" />
</linearGradient>
<linearGradient
id="linearGradient9854">
<stop
id="stop9856"
offset="0.0000000"
style="stop-color:#4e4e4e;stop-opacity:1.0000000;" />
<stop
id="stop9858"
offset="1.0000000"
style="stop-color:#ababab;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient9842"
inkscape:collect="always">
<stop
id="stop9844"
offset="0"
style="stop-color:#727e0a;stop-opacity:1;" />
<stop
id="stop9846"
offset="1"
style="stop-color:#727e0a;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient9830">
<stop
id="stop9832"
offset="0.0000000"
style="stop-color:#505050;stop-opacity:1.0000000;" />
<stop
id="stop9834"
offset="1.0000000"
style="stop-color:#181818;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient8662">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop8664" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop8666" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient8650">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop8652" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop8654" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8650"
id="radialGradient8656"
cx="19.701141"
cy="2.8969381"
fx="19.701141"
fy="2.8969381"
r="17.171415"
gradientTransform="matrix(1.253442,-2.296195e-16,1.747460e-16,0.953900,-15.47908,11.27663)"
gradientUnits="userSpaceOnUse" />
<radialGradient
r="15.644737"
fy="36.421127"
fx="24.837126"
cy="36.421127"
cx="24.837126"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.536723,1.673575e-15,16.87306)"
gradientUnits="userSpaceOnUse"
id="radialGradient9826"
xlink:href="#linearGradient8662"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.017991,4.461116e-16,-5.888254e-16,2.64016,-144.5498,-62.03367)"
r="16.321514"
fy="40.545052"
fx="93.780037"
cy="40.545052"
cx="93.780037"
id="radialGradient9836"
xlink:href="#linearGradient9830"
inkscape:collect="always" />
<linearGradient
gradientTransform="matrix(1.025512,0,0,0.648342,-0.865496,15.63026)"
gradientUnits="userSpaceOnUse"
y2="28.112619"
x2="30.935921"
y1="43.757359"
x1="30.935921"
id="linearGradient9848"
xlink:href="#linearGradient9842"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="27.759069"
x2="18.031221"
y1="19.804117"
x1="46.845825"
id="linearGradient9864"
xlink:href="#linearGradient9854"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.565823,5.084556e-18,-2.416266e-14,1.403262,-37.78323,-9.483303)"
r="9.7227182"
fy="7.1396070"
fx="27.883883"
cy="7.1396070"
cx="27.883883"
id="radialGradient9876"
xlink:href="#linearGradient9868"
inkscape:collect="always" />
<linearGradient
gradientTransform="translate(-1.116120,0.000000)"
gradientUnits="userSpaceOnUse"
y2="24.764584"
x2="34.007416"
y1="19.107729"
x1="31.852951"
id="linearGradient9886"
xlink:href="#linearGradient9880"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="43.449947"
x2="19.755548"
y1="13.663074"
x1="8.7600641"
id="linearGradient9894"
xlink:href="#linearGradient9888"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="18.064039"
x2="33.710651"
y1="21.511185"
x1="31.078955"
id="linearGradient9902"
xlink:href="#linearGradient9896"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
stroke="#a40000"
fill="#727e0a"
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.25490196"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="20.295477"
inkscape:cy="1.9717815"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:showpageshadow="false"
inkscape:window-width="1039"
inkscape:window-height="938"
inkscape:window-x="485"
inkscape:window-y="137" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:title>System Log Out</dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>log out</rdf:li>
<rdf:li>logout</rdf:li>
<rdf:li>exit</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<rect
ry="0.7071048"
rx="0.70710522"
y="2.5692098"
x="13.501722"
height="41.942028"
width="31.99555"
id="rect9828"
style="opacity:1;color:#000000;fill:url(#radialGradient9836);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
inkscape:r_cx="true"
inkscape:r_cy="true" />
<rect
y="31.736542"
x="14"
height="12.263458"
width="30.999998"
id="rect9840"
style="opacity:1;color:#000000;fill:url(#linearGradient9848);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
inkscape:r_cx="true"
inkscape:r_cy="true" />
<path
sodipodi:nodetypes="ccccc"
id="path9852"
d="M 14.037662,43.944859 L 13.998829,3.0545252 L 33.941125,3.0987194 L 33.985319,33.018175 L 14.037662,43.944859 z "
style="overflow:visible;display:inline;visibility:visible;stroke-opacity:1.0000000;stroke-dashoffset:0.0000000;stroke-dasharray:none;stroke-miterlimit:10.000000;marker-end:none;marker-mid:none;marker-start:none;marker:none;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient9864);color:#000000;opacity:1.0000000" />
<path
style="opacity:0.42222222;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
d="M 13.969801,43.944859 L 34.117903,33.062369 L 15.556349,41.989592 L 15.556349,3.0103306 L 13.985886,3.0103306 L 13.969801,43.944859 z "
id="path1360"
inkscape:r_cx="true"
inkscape:r_cy="true"
sodipodi:nodetypes="cccccc" />
<path
sodipodi:type="arc"
style="opacity:0.29946521;color:#000000;fill:url(#radialGradient9826);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
id="path8660"
sodipodi:cx="24.837126"
sodipodi:cy="36.421127"
sodipodi:rx="15.644737"
sodipodi:ry="8.3968935"
d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1 9.1923885,36.421127 A 15.644737 8.3968935 0 1 1 40.481863 36.421127 z"
transform="matrix(0.778490,0.000000,0.000000,0.778490,-7.579815,1.598139)" />
<path
style="opacity:1.0000000;color:#000000;fill:#cc0000;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#a40000;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
d="M 1.7317981,17.593819 L 1.7317981,30.355364 L 9.6641034,30.355364 L 9.6641034,36.176147 L 21.887745,23.952503 L 9.5913424,11.656101 L 9.5913424,17.597067 L 1.7317981,17.593819 z "
id="path8643"
sodipodi:nodetypes="cccccccc" />
<path
style="opacity:0.50802141;color:#000000;fill:url(#radialGradient8656);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
d="M 9.9240084,12.478043 L 9.9240084,17.865661 L 2.0746151,17.865661 L 2.0746151,24.531440 C 12.332521,20.703863 11.954992,27.773987 21.294280,23.946410 L 9.9240084,12.478043 z "
id="path8645"
sodipodi:nodetypes="cccccc" />
<path
sodipodi:nodetypes="cccccccc"
id="path8658"
d="M 2.7193259,18.399985 L 2.7193259,29.536029 L 10.553144,29.536029 L 10.553144,33.793979 L 20.404597,23.948406 L 10.488577,13.684714 L 10.488577,18.402867 L 2.7193259,18.399985 z "
style="overflow:visible;display:inline;visibility:visible;stroke-opacity:1.0000000;stroke-dashoffset:0.0000000;stroke-dasharray:none;stroke-miterlimit:10.000000;marker-end:none;marker-mid:none;marker-start:none;marker:none;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000;stroke:url(#linearGradient9894);fill-rule:evenodd;fill-opacity:1.0000000;fill:none;color:#000000;opacity:0.48128340" />
<path
style="opacity:1;color:#000000;fill:url(#radialGradient9876);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 14.044811,43.757359 L 14,3.0545252 L 33.941125,3.0545252 L 33.761879,33.681088 L 14.044811,43.757359 z "
id="path9866"
sodipodi:nodetypes="ccccc"
inkscape:r_cx="true"
inkscape:r_cy="true" />
<path
sodipodi:nodetypes="cccsscc"
id="path9878"
d="M 29.643025,18.456195 L 31.565472,20.908971 L 30.107064,25.726136 C 30.107064,25.726136 30.372229,27.228738 31.145627,26.212272 C 31.919025,25.195806 34.118082,22.630218 33.730986,20.754291 C 33.443724,19.362175 32.648229,18.699263 32.648229,18.699263 L 29.643025,18.456195 z "
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient9886);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
<path
sodipodi:nodetypes="csccscs"
id="path9862"
d="M 31.477084,17.351340 C 31.477084,17.351340 33.640354,18.353058 33.708889,19.229593 C 33.810670,20.531315 29.466248,24.665476 29.466248,24.665476 C 28.958015,25.284194 28.118326,24.731767 28.582365,24.135146 C 28.582365,24.135146 32.048969,20.017173 31.830637,19.693631 C 31.557026,19.288174 29.863996,18.655068 29.863996,18.655068 C 28.847530,17.903768 30.131617,16.349605 31.477084,17.351340 z "
style="overflow:visible;display:inline;visibility:visible;stroke-opacity:1.0000000;stroke-dashoffset:0.0000000;stroke-dasharray:none;stroke-miterlimit:10.000000;marker-end:none;marker-mid:none;marker-start:none;marker:none;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient9902);color:#000000;opacity:1.0000000" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,515 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="90.000000"
inkscape:export-xdpi="90.000000"
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
width="48px"
height="48px"
id="svg11300"
sodipodi:version="0.32"
inkscape:version="0.44.1"
sodipodi:docbase="/home/lars/subversion/cryptobox/branches/pythonrewrite/design/icons"
sodipodi:docname="unlocked_clavdia.svg">
<defs
id="defs3">
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6719"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
inkscape:collect="always"
id="linearGradient5060">
<stop
style="stop-color:black;stop-opacity:1;"
offset="0"
id="stop5062" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5064" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient6717"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient
id="linearGradient5048">
<stop
style="stop-color:black;stop-opacity:0;"
offset="0"
id="stop5050" />
<stop
id="stop5056"
offset="0.5"
style="stop-color:black;stop-opacity:1;" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop5052" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient6715"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" />
<linearGradient
id="linearGradient11327">
<stop
style="stop-color:#7d6400;stop-opacity:1;"
offset="0"
id="stop11329" />
<stop
style="stop-color:#be9700;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop11331" />
</linearGradient>
<linearGradient
id="linearGradient2092">
<stop
id="stop2094"
offset="0"
style="stop-color:#fff7b0;stop-opacity:1;" />
<stop
style="stop-color:#ffec41;stop-opacity:1.0000000;"
offset="0.20999999"
id="stop2098" />
<stop
id="stop2293"
offset="0.83999997"
style="stop-color:#e2cc00;stop-opacity:1;" />
<stop
id="stop2100"
offset="1"
style="stop-color:#c3af00;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient11335">
<stop
style="stop-color:#6f716d;stop-opacity:1;"
offset="0"
id="stop11337" />
<stop
style="stop-color:#9ea09c;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop11339" />
</linearGradient>
<linearGradient
id="linearGradient10591">
<stop
style="stop-color:#cad0c6;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop10593" />
<stop
id="stop10599"
offset="0.50000000"
style="stop-color:#eaece9;stop-opacity:1.0000000;" />
<stop
style="stop-color:#c5cbc0;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop10595" />
</linearGradient>
<linearGradient
id="linearGradient11520">
<stop
id="stop11522"
offset="0.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop11524"
offset="1.0000000"
style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient11508"
inkscape:collect="always">
<stop
id="stop11510"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop11512"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient11508"
id="radialGradient1348"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,-1.435476e-15,29.48178)"
cx="30.203562"
cy="44.565483"
fx="30.203562"
fy="44.565483"
r="6.5659914" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient11520"
id="radialGradient1366"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
cx="24.445690"
cy="35.878170"
fx="24.445690"
fy="35.878170"
r="20.530962" />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath99374">
<rect
style="opacity:0.8;fill:#e0e0ab;fill-opacity:1;stroke:none;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect99364"
width="22.180567"
height="18.34363"
x="-51.015305"
y="21.246235" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath99379">
<rect
style="opacity:0.8;fill:#e0e0ab;fill-opacity:1;stroke:none;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect99377"
width="25.435051"
height="16.428865"
x="-30.086597"
y="5.2453609" />
</clipPath>
<radialGradient
r="20.530962"
fy="35.878170"
fx="24.445690"
cy="35.878170"
cx="24.445690"
gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
gradientUnits="userSpaceOnUse"
id="radialGradient99656"
xlink:href="#linearGradient11520"
inkscape:collect="always" />
<radialGradient
r="6.5659914"
fy="44.565483"
fx="30.203562"
cy="44.565483"
cx="30.203562"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,-1.435476e-15,29.48178)"
gradientUnits="userSpaceOnUse"
id="radialGradient99654"
xlink:href="#linearGradient11508"
inkscape:collect="always" />
<linearGradient
id="linearGradient99642">
<stop
style="stop-color:#ffffff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop99644" />
<stop
style="stop-color:#dcdcdc;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop99646" />
</linearGradient>
<linearGradient
id="linearGradient99634">
<stop
id="stop99636"
offset="0.0000000"
style="stop-color:#cad0c6;stop-opacity:1.0000000;" />
<stop
style="stop-color:#eaece9;stop-opacity:1.0000000;"
offset="0.50000000"
id="stop99638" />
<stop
id="stop99640"
offset="1.0000000"
style="stop-color:#c5cbc0;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient99628">
<stop
id="stop99630"
offset="0"
style="stop-color:#6f716d;stop-opacity:1;" />
<stop
id="stop99632"
offset="1.0000000"
style="stop-color:#9ea09c;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient99618">
<stop
style="stop-color:#fff7b0;stop-opacity:1;"
offset="0"
id="stop99620" />
<stop
id="stop99622"
offset="0.20999999"
style="stop-color:#ffec41;stop-opacity:1.0000000;" />
<stop
style="stop-color:#e2cc00;stop-opacity:1;"
offset="0.83999997"
id="stop99624" />
<stop
style="stop-color:#c3af00;stop-opacity:1;"
offset="1"
id="stop99626" />
</linearGradient>
<linearGradient
id="linearGradient99612">
<stop
id="stop99614"
offset="0"
style="stop-color:#7d6400;stop-opacity:1;" />
<stop
id="stop99616"
offset="1.0000000"
style="stop-color:#be9700;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
y2="609.50507"
x2="302.85715"
y1="366.64789"
x1="302.85715"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
gradientUnits="userSpaceOnUse"
id="linearGradient99610"
xlink:href="#linearGradient5048"
inkscape:collect="always" />
<linearGradient
id="linearGradient99602">
<stop
id="stop99604"
offset="0"
style="stop-color:black;stop-opacity:0;" />
<stop
style="stop-color:black;stop-opacity:1;"
offset="0.5"
id="stop99606" />
<stop
id="stop99608"
offset="1"
style="stop-color:black;stop-opacity:0;" />
</linearGradient>
<radialGradient
r="117.14286"
fy="486.64789"
fx="605.71429"
cy="486.64789"
cx="605.71429"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
gradientUnits="userSpaceOnUse"
id="radialGradient99600"
xlink:href="#linearGradient5060"
inkscape:collect="always" />
<radialGradient
r="117.14286"
fy="486.64789"
fx="605.71429"
cy="486.64789"
cx="605.71429"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
gradientUnits="userSpaceOnUse"
id="radialGradient99592"
xlink:href="#linearGradient5060"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5048"
id="linearGradient99674"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient99676"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient99678"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient11520"
id="radialGradient99680"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.995058,0,0,1.995058,-24.32488,-35.70087)"
cx="24.445690"
cy="35.878170"
fx="24.445690"
fy="35.878170"
r="20.530962" />
</defs>
<sodipodi:namedview
stroke="#ef2929"
fill="#729fcf"
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.25490196"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="10.91805"
inkscape:cx="34.197982"
inkscape:cy="22.826448"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:showpageshadow="false"
inkscape:window-width="1024"
inkscape:window-height="693"
inkscape:window-x="0"
inkscape:window-y="26" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:creator>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:creator>
<dc:source>http://jimmac.musichall.cz</dc:source>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:title>Read Only Emblem</dc:title>
<dc:subject>
<rdf:Bag>
<rdf:li>emblem</rdf:li>
<rdf:li>read-only</rdf:li>
<rdf:li>nowrite</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
transform="matrix(2.243788e-2,0,0,2.086758e-2,44.06795,40.547)"
id="g6707">
<rect
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect6709"
width="1339.6335"
height="478.35718"
x="-1559.2523"
y="-150.69685" />
<path
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
id="path6711"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="cccc"
id="path6713"
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
<rect
ry="5.4548240"
rx="5.4548240"
y="3.5233452"
x="4.4147282"
height="40.061924"
width="40.061924"
id="rect11518"
style="opacity:1.0000000;color:#000000;fill:url(#radialGradient1366);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#9b9b9b;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
<rect
style="opacity:1.0000000;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
id="rect11528"
width="37.696587"
height="37.696587"
x="5.5973887"
y="4.7060070"
rx="4.2426391"
ry="4.2426391" />
<g
id="g99382"
transform="translate(64.17496,5.12349e-2)">
<path
sodipodi:nodetypes="ccccccsccsccccc"
transform="matrix(0.822017,-0.569462,0.569462,0.822017,-37.20671,-9.737911)"
clip-path="url(#clipPath99379)"
inkscape:r_cy="true"
inkscape:r_cx="true"
id="path2086"
d="M -19.068594,11.432861 C -23.139015,11.560387 -25.83734,13.517631 -25.83734,17.554601 L -25.879035,19.763437 L -23.048301,21.743968 L -11.112355,21.675003 L -11.095387,17.621873 C -11.095387,13.336537 -14.024578,11.485755 -18.45788,11.432861 C -18.66457,11.430382 -18.868408,11.42659 -19.068594,11.432861 z M -18.661456,14.140554 C -18.586607,14.138867 -18.501348,14.140554 -18.423954,14.140554 C -13.50511,14.140554 -13.882306,17.63895 -13.809672,18.681405 L -13.809672,21.675003 L -23.018207,23.137007 L -23.072173,18.698223 C -23.089634,17.664045 -23.376856,14.246926 -18.661456,14.140554 z "
style="opacity:0.69886361;color:black;fill:#888a85;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
<path
clip-path="url(#clipPath99374)"
inkscape:transform-center-y="5.5451416"
inkscape:transform-center-x="-2.4028947"
inkscape:r_cy="true"
inkscape:r_cx="true"
id="path99362"
d="M -40.333928,11.007309 C -44.404349,11.134835 -47.102674,13.092079 -47.102674,17.129049 L -47.102674,21.249451 L -48.018753,21.249451 C -48.690902,21.249451 -49.240182,21.712398 -49.240182,22.292165 L -49.240182,33.122936 C -49.240182,33.702703 -48.690902,34.165651 -48.018753,34.16565 L -31.444653,34.16565 C -30.772494,34.16565 -30.240181,33.702702 -30.240181,33.122936 L -30.240181,22.292165 C -30.240181,21.712399 -30.772494,21.249451 -31.444653,21.249451 L -32.377689,21.249451 L -32.360721,17.196321 C -32.360721,12.910985 -35.289912,11.060203 -39.723214,11.007309 C -39.929904,11.00483 -40.133742,11.001038 -40.333928,11.007309 z M -39.92679,13.715002 C -39.851941,13.713315 -39.766682,13.715002 -39.689288,13.715002 C -34.770444,13.715002 -35.14764,17.213398 -35.075006,18.255853 L -35.075006,21.249451 L -44.337507,21.249451 L -44.337507,18.272671 C -44.354968,17.238493 -44.64219,13.821374 -39.92679,13.715002 z "
style="opacity:0.69886361;color:black;fill:#888a85;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 49 KiB

1
doc/html/fr Symbolic link
View file

@ -0,0 +1 @@
en

1
doc/html/si Symbolic link
View file

@ -0,0 +1 @@
en

4
known_problems Normal file
View file

@ -0,0 +1,4 @@
Bug-Report: twill/other-modules/ClientForm.py: uncomment line 846 ("XHTMLCompatibleFormParser" instead of default parser) - this solves an eternal loop-problem caused by line 958 ("fp.feed(ch)")
Bug-Report: testoob - loading of a TestSuite (as advertised by the commandline help) does not work (due to unittest.py/loadTestsFromModule)

View file

@ -3,26 +3,35 @@ $Id$
You may want to translate the CryptoBox into another language?
Most welcome!
Existing translation can be found in the .hdf files. There are three
easy steps, that won't take longer than one hour to go through:
Existing translations can be found in the .hdf files in the
language directory (online available as
https://systemausfall.org/svn/cryptobox/trunk/lang/).
1.) Download one .hdf in your preferred language (e.g. en.hdf if you're a native english speaker).
There are three easy steps, that won't take longer than one hour
to go through, if you want to translate the cryptobox into a
language of your choice:
2.) Start to change the text behind the equal sign line for line.
1.) Download one .hdf in your preferred language (e.g. "en.hdf"
if you're a native english speaker).
2.) Start to change the text following the equal signs line by line.
3.) Send us your changed .hdf file. That's it - thank you!
Hints:
We are available via mail (cryptobox@systemausfall.org) for any questions. Don't worry to ask us if
something is vague. We prefer "utf" encoded hdf-files. If you don't
know what udf means - just don't care, send us your file and
everything else will be fine. You don't have to translate the whole
file, some minor parts are enough to send back. The community will do
the rest. ;)
We are available via mail (cryptobox@systemausfall.org) for any
questions. Don't worry to ask us if something is vague.
We prefer "utf" encoded hdf-files. If you don't know what utf
means - just don't care, send us your file and everything else
will be fine.
You don't have to translate the whole file - some minor parts are
enough to send back. The community will do the rest. ;)
Again, thanks for your help! We do the Cryptobox things in our
freetime for fun and to provide an open source solution for this
free time for fun and to provide an open source solution for this
special purpose. By helping us, you're taking part in this
development.

View file

@ -9,6 +9,8 @@ help!
- SuccessMessage.InitRunning contains only the first sentence
- SuccessMessage.ReBoot: add a hint for automatic redirection (3rd sentence)
- EmptyCryptoPassword: change 'Text' accordingly to English string.
- Button.System: is in eglish
- ErrorMessage.NoDocumentation: is in english
Below are some smaller changes in English sentences. Someone may change it accordingly.
- MountFailed: add 'Pleasy try again' to the end of the string.

View file

@ -1,215 +1,230 @@
Lang {
Name = Deutsch
Name = deutsch
Status = $Id$
Status = $Id$
Title {
Top = Die CryptoBox
Slogan = ... und 1984 war gestern!
Init = Initialisierung der CryptoBox
Mount = Aktivierung des Containers
Umount = Deaktivierung des Containers
Config = Konfiguration der CryptoBox
System = System
Status = Status der CryptoBox
Volume = Eigenschaften von
}
Title {
Top = Die CryptoBox
Slogan = ... und 1984 war gestern!
Init = Initialisierung der CryptoBox
Mount = Aktivierung der Crypto-Daten
Umount = Deaktivierung der Crypto-Daten
Config = Konfiguration der CryptoBox
Log = Protokoll der CryptoBox
System = System
Status = Status der CryptoBox
Text {
EnterCurrentCryptoPassword = Das Crypto-Passwort eingeben
EnterNewCryptoPassword = Das neue Crypto-Passwort eingeben
EnterSameCryptoPassword = Das Crypto-Passwort wiederholen
EnterCurrentAdminPassword = Das aktuelle Admin-Passwort eingeben:
EnterNewAdminPassword = Das neue Admin-Passwort eingeben:
EnterSameAdminPassword = Das neue Admin-Passwort wiederholen:
InitWarning = Bei der Initialisierung werden ALLE DATEN auf der Festplatte GELÖSCHT!
ConfirmInitHint = Um zu bestätigen, dass du weisst, was du tust, tippe hier bitte exakt Folgendes ein:
ConfirmInit = Ja, loesche alle Daten!
PartitionInfo = Derzeitige Partitionierung der Festplatte:
IPAddress = Netzwerk-Adresse (IP) der CryptoBox:
TimeOut = Zeitabschaltung des Crypto-Dateisystems (in Minuten):
SelectLanguage = Spracheinstellung:
RedirectNote = Klicke hier, falls dein Browser die automatische Weiterleitung nicht unterstützt.
ProjectHomePage = Projekt-Seite
ProjectNote = Die CryptoBox ist ein Projekt von
DoUmount = Deaktivierung des verschlüsselten Dateisystems
DoMount = Aktivierung des verschlüsselten Dateisystems
Configuration = Einstellungen
CryptoIsActive = Die Crypto-Daten sind verfügbar.
CryptoIsDown = Die Crypto-Daten sind vor jedem Zugriff geschützt.
ChoosePartition = Welchen Daten-Container möchtest du auswählen?
ChosenPartition = Der aktuelle Daten-Container ist
ActivePartitions = Die folgenden Daten-Container sind derzeit aktiv
PassivePartitions = Die folgenden Daten-Container sind derzeit inaktiv
ContainerName = Der Name des Daten-Containers
ContainerEncryption = Aktiviere Verschlüsselung
}
Button {
DoInit = Initialisierung
SaveConfig = Speichere Konfiguration
Update = Aktualisieren
Mount = Container aktivieren
Umount = Container deaktivieren
Config = Einstellungen
PowerOff = ausschalten
ReBoot = neu starten
Documentation = Hilfe
Status = Status
System = System
ContainerNameSet = Setze den neuen Namen
InitContainer = Reinitialisiere den Container
}
WarningMessage {
InitNotConfirmed {
Title = Bestätigung schlug fehl
Text = Der Bestätigungssatz muss exakt eingegeben werden!
}
Text {
EnterCurrentCryptoPassword = Das Crypto-Passwort eingeben:
EnterNewCryptoPassword = Das neue Crypto-Passwort eingeben:
EnterSameCryptoPassword = Das Crypto-Passwort wiederholen:
EnterCurrentAdminPassword = Das aktuelle Admin-Passwort eingeben:
EnterNewAdminPassword = Das neue Admin-Passwort eingeben:
EnterSameAdminPassword = Das neue Admin-Passwort wiederholen:
InitWarning = Bei der Initialisierung werden ALLE DATEN auf der Festplatte GEL&Ouml;SCHT!
ConfirmInitHint = Um zu best&auml;tigen, dass du weisst, was du tust, tippe hier bitte exakt Folgendes ein:
ConfirmInit = Ja, loesche alle Daten!
PartitionInfo = Derzeitige Partitionierung der Festplatte:
IPAddress = Netzwerk-Adresse (IP) der CryptoBox:
TimeOut = Zeitabschaltung des Crypto-Dateisystems (in Minuten):
EmptyLog = Das Logbuch der CryptoBox ist leer.
SelectLanguage = Spracheinstellung:
RedirectNote = Klicke hier, falls dein Browser die automatische Weiterleitung nicht unterst&uuml;tzt.
ProjectHomePage = Projekt-Seite
ProjectNote = Die CryptoBox ist ein Projekt von
DoUmount = Deaktivierung des verschl&uuml;sselten Dateisystems
DoMount = Aktivierung des verschl&uuml;sselten Dateisystems
Configuration = Einstellungen
CryptoIsActive = Die Crypto-Daten sind verf&uuml;gbar.
CryptoIsDown = Die Crypto-Daten sind vor jedem Zugriff gesch&uuml;tzt.
EmptyCryptoPassword {
Title = Ungültiges Crypto-Passwort
Text = Du musst ein Crypto-Passwort eingeben!
}
Button {
DoInit = Initialisierung
SaveConfig = Speichere Konfiguration
Update = Aktualisieren
Mount = Crypto-Daten aktivieren
Umount = Crypto-Daten deaktivieren
Config = Einstellungen
PowerOff = ausschalten
ReBoot = neu starten
Protocol = Protokoll anzeigen
Documentation = Hilfe
Status = Status
DifferentCryptoPasswords {
Title = Ungleiche Crypto-Passworte
Text = Die beiden Passworte müssen identisch sein, um Eingabefehler zu verhindern.
}
WarningMessage {
InitNotConfirmed {
Title = Best&auml;tigung schlug fehl
Text = Der Best&auml;tigungssatz muss exakt eingegeben werden!
}
EmptyCryptoPassword {
Title = Ung&uuml;ltiges Crypto-Passwort
Text = Du musst ein Crypto-Passwort eingeben!
}
DifferentCryptoPasswords {
Title = Ungleiche Crypto-Passworte
Text = Die beiden Passworte m&uuml;ssen identisch sein, um Eingabefehler zu verhindern.
}
DifferentAdminPasswords {
Title = Ungleiche Administrations-Passworte
Text = Die beiden Passworte m&uuml;ssen identisch sein, um Eingabefehler zu verhindern.
}
WrongAdminPassword {
Title = Falsches Administrations-Passwort
Text = Das eingegebene Administrations-Passwort ist falsch. Versuche es noch einmal.
}
MountFailed {
Title = Aktivierung schlug fehl
Text = Das verschl&uuml;sselte Dateisystem konnte nicht aktiviert werden. Wahrscheinlich war das Passwort falsch. Versuche es noch einmal.
}
UmountFailed {
Title = Deaktivierung schlug fehl
Text = Das verschl&uuml;sselte Dateisystem konnte nicht abgeschaltet werden. Wahrscheinlich sind noch Dateien ge&ouml;ffnet. Schlie&szlig;e alle potentiell unsauberen Programme (beispielsweise die weitverbreitete Textverarbeitung). Notfalls einfach die CryptoBox ausschalten!
}
NotInitialized {
Title = Keine Konfiguration gefunden
Text = Die CryptoBox wurde noch nicht eingerichtet.
}
InitNotFinished {
Title = Initalisierung noch nicht abgeschlossen
Text = Die Initialisierung wird in wenigen Minuten beendet sein. Erst danach ist diese Aktion m&ouml;glich.
}
IsMounted {
Title = Bereits aktiv
Text = Das verschl&uuml;sselte Dateisystem ist bereits aktiv.
}
NotMounted {
Title = Nicht aktiv
Text = Das verschl&uuml;sselte Dateisystem ist derzeit nicht aktiv.
}
AlreadyConfigured {
Title = Konfiguration gefunden
Text = Die CryptoBox wurde bereits eingerichtet. Bei einer erneuten Initialisierung werden alle Daten gel&ouml;scht!
}
InvalidLanguage {
Title = Ung&uuml;ltige Sprache
Text = Die ausgew&auml;hlte Sprache ist nicht verf&uuml;gbar!
}
InvalidIP {
Title = Ung&uuml;ltige IP
Text = Die ausgew&auml;hlte Netzwerkadresse ist nicht g&uuml;ltig!
}
InvalidTimeOut {
Title = Ung&uuml;ltige Zeitabschaltung
Text = Der ausgew&auml;hlte Wert der Zeitabschaltung ist nicht g&uuml;ltig!
}
ConfigTimeOutFailed {
Title = Fehler beim &Auml;ndern der Zeitabschaltung
Text = Der Wert der Zeitabschaltung konnte nicht ge&auml;ndert werden!
}
ConfigLanguageFailed {
Title = Fehler beim &Auml;ndern der Spracheinstellung
Text = Die Spracheinstellung konnte nicht ge&auml;ndert werden!
}
ConfigIPFailed {
Title = Fehler beim &Auml;ndern der Netzwerkadresse
Text = Die Netzwerkadresse konnte nicht ge&auml;ndert werden!
}
IPAddressChanged {
Title = &Auml;nderung der Netzwerk-Adresse
Text = Die Netzwerk-Adresse der CryptoBox wurde ver&auml;ndert. In wenigen Sekunden werden sie zu der neuen Adresse umgeleitet.
}
DifferentAdminPasswords {
Title = Ungleiche Administrations-Passworte
Text = Die beiden Passworte müssen identisch sein, um Eingabefehler zu verhindern.
}
SuccessMessage {
InitRunning {
Title = Initialisierung l&auml;uft
Text = Die Initialisierung der CryptoBox wird im Hintergrund abgeschlossen. Du kannst die CryptoBox nun konfigurieren und das verschl&uuml;sselte Dateisystem in ein paar Minuten aktivieren.
}
ConfigSaved {
Title = Konfiguration gespeichert
Text = Die neuen Einstellungen der CryptoBox wurden &uuml;bernommem.
}
MountDone {
Title = Crypto-Daten aktiviert
Text = Das verschl&uuml;sselte Dateisystem ist nun verf&uuml;gbar.
}
UmountDone {
Title = Crypto-Daten deaktiviert
Text = Das verschl&uuml;sselte Dateisystem ist nun vor jedem Zugriff gesch&uuml;tzt.
}
PowerOff {
Title = Abschaltung
Text = Die CryptoBox wird gerade heruntergefahren. In wenigen Sekunden kannst du sie ausschalten (falls dies nicht automatisch geschieht).
}
ReBoot {
Title = Neustart
Text = Die CryptoBox wird gerade neu gestartet. In wenigen Sekunden ist sie wieder verf&uuml;gbar. Bitte warte solange - du wirst automatisch weitergeleitet.
}
WrongAdminPassword {
Title = Falsches Administrations-Passwort
Text = Das eingegebene Administrations-Passwort ist falsch. Versuche es noch einmal.
}
MountFailed {
Title = Aktivierung schlug fehl
Text = Das verschlüsselte Dateisystem konnte nicht aktiviert werden. Wahrscheinlich war das Passwort falsch. Versuche es noch einmal.
}
ErrorMessage {
UmountFailed {
Title = Deaktivierung schlug fehl
Text = Das verschlüsselte Dateisystem konnte nicht abgeschaltet werden. Wahrscheinlich sind noch Dateien geöffnet. Schlie&szlig;e alle potentiell unsauberen Programme (beispielsweise die weitverbreitete Textverarbeitung). Notfalls einfach die CryptoBox ausschalten!
}
UnknownAction {
Title = Unbekannte Aktion
Text = Du hast eine undefinierte Aktion angefordert.
}
NotInitialized {
Title = Keine Konfiguration gefunden
Text = Die CryptoBox wurde noch nicht eingerichtet.
}
NoSSL {
Title = Unverschl&uuml;sselte Verbindung
Text = Die CryptoBox akzeptiert nur verschl&uuml;sselte Verbindungen (https). So bleibt das Passwort vor neugierigen Augen gesch&uuml;tzt. In wenigen Sekunden wird eine verschl&uuml;sselte Verbindung hergestellt.
}
InitNotFinished {
Title = Initalisierung noch nicht abgeschlossen
Text = Die Initialisierung wird in wenigen Minuten beendet sein. Erst danach ist diese Aktion m&ouml;glich.
}
InitFailed {
Title = Initialisierung fehlgeschlagen
Text = Sende bitte den Inhalt des Protokolls (siehe oben) an die Entwickler der CryptoBox (cryptobox@systemausfall.org).
}
IsMounted {
Title = Bereits aktiv
Text = Das verschlüsselte Dateisystem ist bereits aktiv.
}
NoHardDisk {
Title = Keine Festplatte
Text = Es wurde kein Datentr&auml;ger gefunden, der zur Speicherung der verschl&uuml;sselten Daten geeignet ist. Pr&uuml;fe bitte, ob beim Anschalten des Computers eine Festplatte vom BIOS erkannt wurde.
}
NotMounted {
Title = Nicht aktiv
Text = Das verschlüsselte Dateisystem ist derzeit nicht aktiv.
}
AlreadyConfigured {
Title = Konfiguration gefunden
Text = Die CryptoBox wurde bereits eingerichtet. Bei einer erneuten Initialisierung werden alle Daten gelöscht!
}
InvalidLanguage {
Title = Ungültige Sprache
Text = Die ausgewählte Sprache ist nicht verfügbar!
}
ConfigLanguageFailed {
Title = Fehler beim Ändern der Spracheinstellung
Text = Die Spracheinstellung konnte nicht geändert werden!
}
NoDiskAvailableForMount {
Title = Kein Daten-Container verfügbar
Text = Es ist kein inaktiver Daten-Container verfügbar. Vielleicht sind bereits alle Container aktiv?
}
NoDiskAvailableForUmount {
Title = Kein Daten-Container verfügbar
Text = Kein Daten-Container ist aktiv. Vielleicht wurden alle Container deaktiviert.
}
InvalidDevice {
Title = Ungültiger Container
Text = Der angegebene Daten-Container ist nicht zulässig.
}
InvalidVolumeName {
Title = Umbenennung fehlgeschlagen
Text = Der gewählte neue Name des Containers ist ungültig. Versuche es erneut.
}
SetVolumeNameFailed {
Title = Umbenennung fehlgeschlagen
Text = Die Umbenennung des Containers schlug fehl. Details findest du in der Log-Datei.
}
VolumeMayNotBeMounted {
Title = Der Container ist derzeit aktiv
Text = Die gewünschte Aktion kann nicht durchgeführt werden, solange der Container aktiv ist.
}
}
SuccessMessage {
InitRunning {
Title = Initialisierung läuft
Text = Die Initialisierung der CryptoBox wird im Hintergrund abgeschlossen. Du kannst die CryptoBox nun konfigurieren und das verschlüsselte Dateisystem in ein paar Minuten aktivieren.
}
ConfigSaved {
Title = Konfiguration gespeichert
Text = Die neuen Einstellungen der CryptoBox wurden übernommem.
}
MountDone {
Title = Crypto-Daten aktiviert
Text = Das verschlüsselte Dateisystem ist nun verfügbar.
}
UmountDone {
Title = Crypto-Daten deaktiviert
Text = Das verschlüsselte Dateisystem ist nun vor jedem Zugriff geschützt.
}
PowerOff {
Title = Abschaltung
Text = Die CryptoBox wird gerade heruntergefahren. In wenigen Sekunden kannst du sie ausschalten (falls dies nicht automatisch geschieht).
}
ReBoot {
Title = Neustart
Text = Die CryptoBox wird gerade neu gestartet. In wenigen Sekunden ist sie wieder verfügbar. Bitte warte solange - du wirst automatisch weitergeleitet.
}
}
ErrorMessage {
UnknownAction {
Title = Unbekannte Aktion
Text = Du hast eine undefinierte Aktion angefordert.
}
NoSSL {
Title = Unverschlüsselte Verbindung
Text = Die CryptoBox akzeptiert nur verschlüsselte Verbindungen (https). So bleibt das Passwort vor neugierigen Augen geschützt. In wenigen Sekunden wird eine verschlüsselte Verbindung hergestellt.
}
InitFailed {
Title = Initialisierung fehlgeschlagen
Text = Sende bitte den Inhalt des Protokolls (siehe oben) an die Entwickler der CryptoBox (cryptobox@systemausfall.org).
}
NoHardDisk {
Title = Keine Festplatte
Text = Es wurde kein Datenträger gefunden, der zur Speicherung der verschlüsselten Daten geeignet ist. Prüfe bitte, ob beim Anschalten des Computers eine Festplatte vom BIOS erkannt wurde.
}
NoDocumentation {
Title = Keine Hilfeseiten
Text = Es sind keine Hilfeseiten verfügbar!
}
}

View file

@ -1,255 +1,187 @@
Lang {
Name = English
Name = english
Status = $Id$
Title {
Top = The CryptoBox
Slogan = Privacy for the rest of us.
Init = CryptoBox initialization
Mount = Activation of encrypted data
Umount = Deactivation of encrypted data
Config = CryptoBox configuration
Log = CryptoBox logfiles
System = System
Status = Status
Volume = Properties of
}
Text {
EnterCurrentCryptoPassword = Enter the crypto password:
EnterNewCryptoPassword = Enter the new crypto password:
EnterSameCryptoPassword = Repeat the new crypto password:
EnterCurrentAdminPassword = Enter the current administration password:
EnterNewAdminPassword = Enter the new administration password:
EnterSameAdminPassword = Repeat the new administration password:
InitWarning = During the process of initialization ALL DATA on the disk WILL BE DELETED!
ConfirmInitHint = To confirm that you know what you are doing, please enter exactly the following sequence:
ConfirmInit = Yes, delete all data!
PartitionInfo = Current partioning of the disk:
IPAddress = Network address (IP) of the CryptoBox:
TimeOut = Timeout for deactivation of the encrypted filesystem (in minutes):
EmptyLog = The logfiles of the CryptoBox are empty.
SelectLanguage = Language preferences:
RedirectNote = Click here if your browser does not support automatic redirection.
ProjectHomePage = Website of project
ProjectNote = The CryptoBox is a project of
DoUmount = Deactivation of the encrypted filesystem
DoMount = Activation of the encrypted filesystem
Configuration = Configuration
CryptoIsActive = The encrypted data is accessible.
CryptoIsDown = The encrypted data is protected from any access.
ChoosePartition = Which container do you want to enable?
ChosenPartition = The chosen container is
ActivePartitions = The following containers are enabled
PassivePartitions = The following containers are disabled
ContainerName = Container's name:
ContainerEncryption = Enable encryption
}
Button {
DoInit = Initialization
SaveConfig = Save configuration
Update = Refresh
Mount = Activate filesystem
Umount = Deactivate filesystem
Config = Configuration
PowerOff = Shutdown
ReBoot = Reboot
Protocol = Show logfiles
Documentation = Help
Status = Status
System = System
ContainerNameSet = Change name
InitContainer = Initialize container
}
WarningMessage {
InitNotConfirmed {
Title = Confirmation failed
Text = The sentence has to be entered exactly as shown!
}
EmptyCryptoPassword {
Title = Invalid crypto password
Text = You have to enter a crypto password!
}
DifferentCryptoPasswords {
Title = Crypto passwords do not match
Text = Both entered passwords have to be identical to ensure this is the desired password.
}
DifferentAdminPasswords {
Title = Administration passwords do not match
Text = Both entered passwords have to be identical to ensure this is the desired password.
}
WrongAdminPassword {
Title = Wrong Administration password
Text = The entered administration password is wrong. Please try again.
}
MountFailed {
Title = Activation failed
Text = The encrypted filesystem could not be activated. Probably the given password was wrong. Please try again.
}
UmountFailed {
Title = Deactivation failed
Text = The encrypted filesystem could not be deactivated. Probably some files are still in use. Close all unclean programs (for example that widely used word processor). In case of emergency just shut down the CryptoBox!
}
NotInitialized {
Title = No configuration found
Text = The CryptoBox has not yet been configured.
}
InitNotFinished {
Title = Initialization not yet completed
Text = Initialization will be completed in a few minutes. After completed initialization this action will become available.
}
IsMounted {
Title = Already active
Text = The encrypted filesystem has already been activated.
}
NotMounted {
Title = Inactive
Text = The encrypted filesystem is currently not active.
}
AlreadyConfigured {
Title = Configuration found
Text = The CryptoBox has already been configured. If you initialize again, all data will be deleted!
}
InvalidLanguage {
Title = Invalid language
Text = The selected language is not available!
}
InvalidIP {
Title = Invalid IP address
Text = The selected network address is not valid!
}
InvalidTimeOut {
Title = Invalid timeout
Text = The selected timeout is not valid!
}
ConfigTimeOutFailed {
Title = Error during change of timeout
Text = The timeout value could not be changed!
}
ConfigLanguageFailed {
Title = Error during change of language preferences
Text = The language preferences could not be changed!
}
ConfigIPFailed {
Title = Error during change of network address
Text = The network address could not be changed!
}
IPAddressChanged {
Title = Change of network address
Text = The network address has been changed. In a few seconds you will get redirected to the new address.
}
NoDiskAvailableForMount {
Title = No partition available
Text = There is no unused container available. Maybe all containers are already mounted?
}
NoDiskAvailableForUmount {
Title = No partition available
Text = There is no active container available for turning off. Maybe there is no active container?
}
InvalidDevice {
Title = Invalid device
Text = The device you have chosen is invalid!
}
InvalidVolumeName {
Title = Changing of container's name failed
Text = The supplied new name of the container was invalid. Please try again!
}
SetVolumeNameFailed {
Title = Changing of container's name failed
Text = Could not change the name of the container. Take a look at the log files for details.
}
VolumeMayNotBeMounted {
Title = The container is mounted
Text = This action is not available while the container is active. Please turn it off first.
}
}
SuccessMessage {
InitRunning {
Title = Initialization running
Text = The initialization will be completed in background. You may configure it now and activate the encrypted filesystem in a few minutes.
}
ConfigSaved {
Title = Configuration saved
Text = The new settings have been accepted.
}
MountDone {
Title = Encrypted filesystem activated
Text = The encrypted filesystem is now available.
}
UmountDone {
Title = Encrypted filesystem deactivated
Text = The encrypted filesystem is now secured from all forms of access.
}
PowerOff {
Title = Shutdown
Text = The CryptoBox is currently going to halt. In a few seconds you can power it off (in case this does not happen automatically).
}
ReBoot {
Title = Reboot
Text = The CryptoBox is currently rebooting. In a few seconds it will be available again. Please wait - you will get redirected, when the reboot has finished.
}
}
ErrorMessage {
UnknownAction {
Title = Unknown action
Text = You have requested an undefined action.
}
NoSSL {
Title = Unencrypted connection
Text = The CryptoBox only accepts encrypted connections (https), so the password is safe from curious eyes. The encrypted connection will be established in a few seconds.
}
InitFailed {
Title = Initialization failed
Text = Please send the logfiles (see above) to the developers of the CryptoBox (cryptobox@systemausfall.org).
}
NoHardDisk {
Title = No hard disk
Text = No disk suitable for an encrypted filesystem found. Please ensure the BIOS detected the disk during power-on of the computer.
}
}
Status = $Id$
Title {
Top = The CryptoBox
Slogan = Privacy for the rest of us.
Init = CryptoBox initialization
Config = CryptoBox configuration
System = System
Status = Status
Volume = Volume
AccessDenied = Access denied
}
Text {
AccessDenied = Sorry - you are not allowed to do this!
EnterCurrentPassword = Enter the password
EnterNewPassword = Enter new password
EnterSamePassword = Repeat new password
TimeOut = Timeout for deactivation of the encrypted filesystem (in minutes):
SelectLanguage = Language preferences:
RedirectNote = Click here if your browser does not support automatic redirection.
ProjectHomePage = Website of project
ProjectNote = The CryptoBox is a project of
Configuration = Configuration
CryptoIsActive = The encrypted data is accessible.
CryptoIsDown = The encrypted data is protected from any access.
ChoosePartition = Which container do you want to enable?
ChosenPartition = The chosen container is
ActivePartitions = The following containers are enabled
PassivePartitions = The following containers are disabled
ContainerName = Container's name
ContainerEncryption = Enable encryption
}
Button {
DoInit = Initialization
SaveConfig = Save configuration
Update = Refresh
Config = Configuration
Documentation = Help
Status = Status
System = System
InitContainer = Initialize container
SelectLanguage = Select language
HelpForForm = Get help
}
WarningMessage {
EmptyPassword {
Title = Missing password
Text = You have to enter a password!
}
EmptyNewPassword {
Title = Missing new password
Text = You have to enter a new password!
}
DifferentPasswords {
Title = Different passwords
Text = The passwords you entered did not match.
}
NotInitialized {
Title = No configuration found
Text = The CryptoBox has not yet been configured.
}
InitNotFinished {
Title = Initialization not yet completed
Text = Initialization will be completed in a few minutes. After completed initialization this action will become available.
}
AlreadyConfigured {
Title = Configuration found
Text = The CryptoBox has already been configured. If you initialize again, all data will be deleted!
}
InvalidLanguage {
Title = Invalid language
Text = The selected language is not available!
}
ConfigLanguageFailed {
Title = Error during change of language preferences
Text = The language preferences could not be changed!
}
NoDiskAvailableForMount {
Title = No partition available
Text = There is no unused container available. Maybe all containers are already mounted?
}
NoDiskAvailableForUmount {
Title = No partition available
Text = There is no active container available for turning off. Maybe there is no active container?
}
InvalidDevice {
Title = Invalid device
Text = The device you have chosen is invalid!
}
InvalidType {
Title = Unknown type
Text = The type of this volume is unknown.
}
VolumeMayNotBeMounted {
Title = The container is mounted
Text = This action is not available while the container is active. Please turn it off first.
}
}
SuccessMessage {
InitRunning {
Title = Initialization running
Text = The initialization will be completed in background. You may configure it now and activate the encrypted filesystem in a few minutes.
}
ConfigSaved {
Title = Configuration saved
Text = The new settings have been accepted.
}
PowerOff {
Title = Shutdown
Text = The CryptoBox is currently going to halt. In a few seconds you can power it off (in case this does not happen automatically).
}
ReBoot {
Title = Reboot
Text = The CryptoBox is currently rebooting. In a few seconds it will be available again. Please wait - you will get redirected, when the reboot has finished.
}
}
EnvironmentWarning {
ReadOnlyConfig {
Text = Read-only setup detected - probably you should create a configuration partition.
Link.Text = Initialize partition
Link.Rel = partition
}
NoSSL {
Text = The connection is not encrypted - passwords can be easily intercepted.
Link.Text = Use encrypted connection
Link.Prot = https
}
}
}
ErrorMessage {
UnknownAction {
Title = Unknown action
Text = You have requested an undefined action.
}
InitFailed {
Title = Initialization failed
Text = Please send the logfiles (see above) to the developers of the CryptoBox (cryptobox@systemausfall.org).
}
NoHardDisk {
Title = No hard disk
Text = No disk suitable for an encrypted filesystem found. Please ensure the BIOS detected the disk during power-on of the computer.
}
NoDocumentation {
Title = No documentation
Text = There is no documentation available!
}
}

View file

@ -1,256 +1,254 @@
Lang {
Name = Francais
Name = francais
Status = $Id$
Status = $Id$
Title {
Top = La CryptoBox
Slogan = La vie privée pour nous autres.
Init = Initialisation CryptoBox
Mount = Activation des données cryptées
Umount = Déactivation des données cryptées
Config = CryptoBox configuration
Log = fichiers log CryptoBox
System = Système
Status = Statut
Volume = Propriétés de
}
Title {
Top = La CryptoBox
Slogan = La vie privée pour nous autres.
Init = Initialisation CryptoBox
Mount = Activation des données cryptées
Umount = Déactivation des données cryptées
Config = CryptoBox configuration
Log = fichiers log CryptoBox
System = Système
Status = Statut
Volume = Propriétés de
Text {
EnterCurrentCryptoPassword = Entrez le mot de passe crypto :
EnterNewCryptoPassword = Entrez le nouveau mot de passe crypto :
EnterSameCryptoPassword = Répétez le nouveau mot de passe crypto :
EnterCurrentAdminPassword = Entrez le mot de passe administrateur actuel:
EnterNewAdminPassword = Entrez le nouveau mot de passe administrateur :
EnterSameAdminPassword = Répétez le nouveau mot de passe administrateur :
InitWarning = Pendant le procès d'initialisation TOUTES LES DONNÉES sur le disque vont être SUPPRIMÉES !
ConfirmInitHint = Pour confirmer que vous sachiez exactement ce que vous faites, veuillez taper exactement la phrase suivante :
ConfirmInit = Oui, supprimer toutes les données !
PartitionInfo = Partitionnement actuel du disque :
IPAddress = Adresse réseau (IP) de la CryptoBox :
TimeOut = Timeout pour la désactivation du système de fichiers crypté (en minutes):
EmptyLog = Les fichiers log de la CryptoBox sont vides.
SelectLanguage = Préférences de langue :
RedirectNote = Cliquez ici si votre navigateur ne supporte pas la redirection automatique.
ProjectHomePage = Site web du projet
ProjectNote = La CryptoBox est un projet de
DoUmount = Déactivation du système de fichiers crypté
DoMount = Activation du système de fichiers crypté
Configuration = Configuration
CryptoIsActive = Les données cryptées sont accessibles.
CryptoIsDown = Les données cryptées sont protégés de tout accès.
ChoosePartition = Quel conteneur voulez-vous activer ?
ChosenPartition = Le conteneur que vous avez choisi est
ActivePartitions = Les conteneurs suivants sont activés
PassivePartitions = Les conteneurs suivants sont désactivés
ContainerName = Nom du conteneur :
ContainerEncryption = Aciver le cryptage
}
Button {
DoInit = Initialisation
SaveConfig = Sauvegarder la configuration
Update = Recharger
Mount = Activer système de fichiers
Umount = Déactiver système de fichiers
Config = Configuration
PowerOff = Arrêt
ReBoot = Redémarrage
Protocol = Montrer fichiers log
Documentation = Aide
Status = Status
System = Système
ContainerNameSet = Changer nom
InitContainer = Initialiser conteneur
}
WarningMessage {
InitNotConfirmed {
Title = Echec de la confirmation
Text = La phrase n'a pas été tapé exactement !
}
Text {
EnterCurrentCryptoPassword = Entrez le mot de passe crypto :
EnterNewCryptoPassword = Entrez le nouveau mot de passe crypto :
EnterSameCryptoPassword = Répétez le nouveau mot de passe crypto :
EnterCurrentAdminPassword = Entrez le mot de passe administrateur actuel:
EnterNewAdminPassword = Entrez le nouveau mot de passe administrateur :
EnterSameAdminPassword = Répétez le nouveau mot de passe administrateur :
InitWarning = Pendant le procès d'initialisation TOUTES LES DONNÉES sur le disque vont être SUPPRIMÉES !
ConfirmInitHint = Pour confirmer que vous sachiez exactement ce que vous faites, veuillez taper exactement la phrase suivante :
ConfirmInit = Oui, supprimer toutes les données !
PartitionInfo = Partitionnement actuel du disque :
IPAddress = Adresse réseau (IP) de la CryptoBox :
TimeOut = Timeout pour la désactivation du système de fichiers crypté (en minutes):
EmptyLog = Les fichiers log de la CryptoBox sont vides.
SelectLanguage = Préférences de langue :
RedirectNote = Cliquez ici si votre navigateur ne supporte pas la redirection automatique.
ProjectHomePage = Site web du projet
ProjectNote = La CryptoBox est un projet de
DoUmount = Déactivation du système de fichiers crypté
DoMount = Activation du système de fichiers crypté
Configuration = Configuration
CryptoIsActive = Les données cryptées sont accessibles.
CryptoIsDown = Les données cryptées sont protégés de tout accès.
ChoosePartition = Quel conteneur voulez-vous activer ?
ChosenPartition = Le conteneur que vous avez choisi est
ActivePartitions = Les conteneurs suivants sont activés
PassivePartitions = Les conteneurs suivants sont désactivés
ContainerName = Nom du conteneur :
ContainerEncryption = Aciver le cryptage
EmptyCryptoPassword {
Title = Mot de passe crypto invalide
Text = Vous devez entrer un mot de passe crypto !
}
Button {
DoInit = Initialisation
SaveConfig = Sauvegarder la configuration
Update = Recharger
Mount = Activer système de fichiers
Umount = Déactiver système de fichiers
Config = Configuration
PowerOff = Arrêt
ReBoot = Redémarrage
Protocol = Montrer fichiers log
Documentation = Aide
Status = Status
System = Système
ContainerNameSet = Changer nom
InitContainer = Initialiser conteneur
DifferentCryptoPasswords {
Title = Les mots de passe crypto ne correspondent pas
Text = Les deux mots de passe rentrés doivent être identiques afin de vérifier que ce mot de passe soit celui qui est désiré.
}
WarningMessage {
InitNotConfirmed {
Title = Echec de la confirmation
Text = La phrase n'a pas été tapé exactement !
}
EmptyCryptoPassword {
Title = Mot de passe crypto invalide
Text = Vous devez entrer un mot de passe crypto !
}
DifferentCryptoPasswords {
Title = Les mots de passe crypto ne correspondent pas
Text = Les deux mots de passe rentrés doivent être identiques afin de vérifier que ce mot de passe soit celui qui est désiré.
}
DifferentAdminPasswords {
Title = Les mots de passe administrateur ne correspondent pas
Text = Les deux mots de passe rentrés doivent être identiques afin de vérifier que ce mot de passe soit celui qui est désiré.
}
WrongAdminPassword {
Title = Mot de passe administrateur erroné
Text = Le mot de passe administrateur que vous avez rentré est erroné. Veuillez réessayer.
}
MountFailed {
Title = Echec de l'activation
Text = Le sytème de fichiers crypté n'a pu être activé. Probablement le mot de passe que vous avez fourni était erroné. Veuillez réessayer.
}
UmountFailed {
Title = Echec de la désactivation
Text = Le système de fichiers crypté n'a pu être désactivé. Probablement certains fichiers sont en cours d'utilisation. Fermez tous les programmes. En cas d'urgence, éteignez la CryptoBox !
}
NotInitialized {
Title = Aucune configuration trouvée
Text = La CryptoBox n'a pas encore été configurée.
}
InitNotFinished {
Title = L'initialisation n'est pas encore complétée
Text = L'initialisation va être complétée en quelques minutes. Après comlpétion de l'initialisation cette action va être disponible.
}
IsMounted {
Title = Déjà actif
Text = Le système de fichiers crypté a déjà été activé.
}
NotMounted {
Title = Inactif
Text = Le système de fichiers crypté n'est pas actif actuellement.
}
AlreadyConfigured {
Title = Configuration trouvé
Text = La CryptoBox a déjà été configurée. Si vous réinitialisez une nouvelle fois, toutes les données seront perdues !
}
InvalidLanguage {
Title = Langue invalide
Text = La langue choisie n'est pas disponible !
}
InvalidIP {
Title = Addresse IP invalide
Text = L'adresse réseau sélectionnée n'est pas valide !
}
InvalidTimeOut {
Title = Timeout invalide
Text = Le timeout sélectionné n'est pas valide !
}
ConfigTimeOutFailed {
Title = Erreur pendant le changement du timeout
Text = La valeur du timeout n'a pas pu être changé !
}
ConfigLanguageFailed {
Title = Erreur pendant le changement des préférences de langue
Text = Les préférences de langue n'ont pu être changées !
}
ConfigIPFailed {
Title = Erreur pendant le changement de l'adresse réseau
Text = L'adresse réseau n'a pas pu être changée !
}
IPAddressChanged {
Title = Changement de l'adresse réseau
Text = L'adresse réseau a été changée. dans quelques secondes vous allez être redirigés vers la nouvelle adresse.
}
NoDiskAvailableForMount {
Title = Aucune partition disponible
Text = Il n'y a pas de conteneur inutilisé disponible. Peut-être tous les conteneur sont déjà montés ?
}
NoDiskAvailableForUmount {
Title = Aucune partition disponible
Text = Il n'y a pas de conteneur actif qui peut être éteint. Peut-être n y a-t-il pas de conteneur actif ?
}
InvalidDevice {
Title = Device invalide
Text = Le device que vous avez choisi est invalide !
}
InvalidVolumeName {
Title = Echec du changement du nom du conteneur
Text = Le nouveau nom du conteneur était invalide. Veuillez réessayer !
}
SetVolumeNameFailed {
Title = Echec lors du changmenent du nom du conteneur
Text = Le nom du conteneur n'a pas pu être changé. Veuillez regarder les fichiers log pour plus de détails.
}
VolumeMayNotBeMounted {
Title = Le conteneur est monté
Text = Cette action n'est pas disponible pendant que le conteneur est actif. Désactivez-le d'abord.
}
DifferentAdminPasswords {
Title = Les mots de passe administrateur ne correspondent pas
Text = Les deux mots de passe rentrés doivent être identiques afin de vérifier que ce mot de passe soit celui qui est désiré.
}
SuccessMessage {
InitRunning {
Title = Initialisation en cours
Text = L'initialisation va être complétée en tant que tâche de fond. Vous pouvez configurer maintenant et le système de fichiers crypté dans quelques minutes.
}
ConfigSaved {
Title = Configuration sauvegardée
Text = Les nouveaux paramètres ont été acceptés.
}
MountDone {
Title = Système de fichiers crypté activé
Text = Le système de fichiers crypté est maintenant disponible.
}
UmountDone {
Title = Système de fichiers crypté déactivé
Text = Le système de fichiers crypté est maintenant sécurisé de toute forme d'accès.
}
PowerOff {
Title = Arrêt
Text = La CryptoBox va maintenant s'éteindre. Dans quelques secondes vous pouvez l'éteindre (au cas où ceci ne se passe pas automatiquement).
}
ReBoot {
Title = Redémarrage
Text = La CryptoBox est en train de redémarrer. Dans quelques secondes elle va à nouveau être disponible. Veuillez attendre - vous allez être redirigés quand le redémarrage est accomplie.
}
WrongAdminPassword {
Title = Mot de passe administrateur erroné
Text = Le mot de passe administrateur que vous avez rentré est erroné. Veuillez réessayer.
}
ErrorMessage {
UnknownAction {
Title = Action inconnue
Text = Vous avez demandé une action indéfinie.
}
NoSSL {
Title = Connexion non cryptée
Text = La CryptoBox accepte seulement des connexions cryptées (https), afin que le mot de passe ne soit pas visible pour des yeux curieux. La connexion cryptée va être établie dans quelques secondes.
}
InitFailed {
Title = Initialisation échouée
Text = Veuillez envoyer les fichiers log (voir ci-dessus) aux développeurs de la CryptoBox (cryptobox@systemausfall.org).
}
NoHardDisk {
Title = Aucun disque dur
Text = Aucun disque utilisable pour un système de fichier crypté a été trouvé. Veuillez vérifier que le BIOS a détecté le disque pendant le démarrage de l'ordinateur.
}
MountFailed {
Title = Echec de l'activation
Text = Le sytème de fichiers crypté n'a pu être activé. Probablement le mot de passe que vous avez fourni était erroné. Veuillez réessayer.
}
UmountFailed {
Title = Echec de la désactivation
Text = Le système de fichiers crypté n'a pu être désactivé. Probablement certains fichiers sont en cours d'utilisation. Fermez tous les programmes. En cas d'urgence, éteignez la CryptoBox !
}
NotInitialized {
Title = Aucune configuration trouvée
Text = La CryptoBox n'a pas encore été configurée.
}
InitNotFinished {
Title = L'initialisation n'est pas encore complétée
Text = L'initialisation va être complétée en quelques minutes. Après comlpétion de l'initialisation cette action va être disponible.
}
IsMounted {
Title = Déjà actif
Text = Le système de fichiers crypté a déjà été activé.
}
NotMounted {
Title = Inactif
Text = Le système de fichiers crypté n'est pas actif actuellement.
}
AlreadyConfigured {
Title = Configuration trouvé
Text = La CryptoBox a déjà été configurée. Si vous réinitialisez une nouvelle fois, toutes les données seront perdues !
}
InvalidLanguage {
Title = Langue invalide
Text = La langue choisie n'est pas disponible !
}
InvalidIP {
Title = Addresse IP invalide
Text = L'adresse réseau sélectionnée n'est pas valide !
}
InvalidTimeOut {
Title = Timeout invalide
Text = Le timeout sélectionné n'est pas valide !
}
ConfigTimeOutFailed {
Title = Erreur pendant le changement du timeout
Text = La valeur du timeout n'a pas pu être changé !
}
ConfigLanguageFailed {
Title = Erreur pendant le changement des préférences de langue
Text = Les préférences de langue n'ont pu être changées !
}
ConfigIPFailed {
Title = Erreur pendant le changement de l'adresse réseau
Text = L'adresse réseau n'a pas pu être changée !
}
IPAddressChanged {
Title = Changement de l'adresse réseau
Text = L'adresse réseau a été changée. dans quelques secondes vous allez être redirigés vers la nouvelle adresse.
}
NoDiskAvailableForMount {
Title = Aucune partition disponible
Text = Il n'y a pas de conteneur inutilisé disponible. Peut-être tous les conteneur sont déjà montés ?
}
NoDiskAvailableForUmount {
Title = Aucune partition disponible
Text = Il n'y a pas de conteneur actif qui peut être éteint. Peut-être n y a-t-il pas de conteneur actif ?
}
InvalidDevice {
Title = Device invalide
Text = Le device que vous avez choisi est invalide !
}
InvalidVolumeName {
Title = Echec du changement du nom du conteneur
Text = Le nouveau nom du conteneur était invalide. Veuillez réessayer !
}
SetVolumeNameFailed {
Title = Echec lors du changmenent du nom du conteneur
Text = Le nom du conteneur n'a pas pu être changé. Veuillez regarder les fichiers log pour plus de détails.
}
VolumeMayNotBeMounted {
Title = Le conteneur est monté
Text = Cette action n'est pas disponible pendant que le conteneur est actif. Désactivez-le d'abord.
}
}
SuccessMessage {
InitRunning {
Title = Initialisation en cours
Text = L'initialisation va être complétée en tant que tâche de fond. Vous pouvez configurer maintenant et le système de fichiers crypté dans quelques minutes.
}
ConfigSaved {
Title = Configuration sauvegardée
Text = Les nouveaux paramètres ont été acceptés.
}
MountDone {
Title = Système de fichiers crypté activé
Text = Le système de fichiers crypté est maintenant disponible.
}
UmountDone {
Title = Système de fichiers crypté déactivé
Text = Le système de fichiers crypté est maintenant sécurisé de toute forme d'accès.
}
PowerOff {
Title = Arrêt
Text = La CryptoBox va maintenant s'éteindre. Dans quelques secondes vous pouvez l'éteindre (au cas où ceci ne se passe pas automatiquement).
}
ReBoot {
Title = Redémarrage
Text = La CryptoBox est en train de redémarrer. Dans quelques secondes elle va à nouveau être disponible. Veuillez attendre - vous allez être redirigés quand le redémarrage est accomplie.
}
}
ErrorMessage {
UnknownAction {
Title = Action inconnue
Text = Vous avez demandé une action indéfinie.
}
NoSSL {
Title = Connexion non cryptée
Text = La CryptoBox accepte seulement des connexions cryptées (https), afin que le mot de passe ne soit pas visible pour des yeux curieux. La connexion cryptée va être établie dans quelques secondes.
}
InitFailed {
Title = Initialisation échouée
Text = Veuillez envoyer les fichiers log (voir ci-dessus) aux développeurs de la CryptoBox (cryptobox@systemausfall.org).
}
NoHardDisk {
Title = Aucun disque dur
Text = Aucun disque utilisable pour un système de fichier crypté a été trouvé. Veuillez vérifier que le BIOS a détecté le disque pendant le démarrage de l'ordinateur.
}
}
}

View file

@ -0,0 +1,24 @@
Some important notes regarding the language files:
1) language file informations
The toplevel attribute "Name" is mandatory and should represent the local name of
the language (e.g.: English, German, French, ...).
2) warning/success messages
Attributes:
Title - title of the message
Text - text of the message
Link.Text - textual representation of a link
Link.Abs - absolute URL e.g. http://cryptobox.org/trac
Link.Prot - http|https
Link.Rel - relative url (based on the cgi root)
All values are optional, but you should follow these rules:
- at least one of "Title" and "Text" should be defined
- if there are "Link" attributes, then you should also define "Link.Text"
- "Link.Abs" can not be combined with "Link.Prot" or "Link.Rel"
- "Link.Rel" and "Link.Prot" may be used together

View file

@ -1,215 +1,193 @@
Lang {
Name = Slovenščina
Name = slovenščina
Status = $Id$
Title {
Top = The CryptoBox
Slogan = Privatnost v vsako vas!
Init = CryptoBox zagon
Mount = Aktivacija kriptiranih podatkov
Umount = Deaktivacija kriptiranih podatkov
Config = CryptoBox konfiguracija
Log = CryptoBox dnevnik
ShutDown = Ugasni
Status = Stanje
}
Text {
EnterCurrentCryptoPassword = Vpišite geslo:
EnterNewCryptoPassword = Vpišite novo geslo:
EnterSameCryptoPassword = Ponovite novo geslo:
EnterCurrentAdminPassword = Vnesite trenutno obstoječe geslo administratorja/ke:
EnterNewAdminPassword = Vnesite novo geslo administratorja/ke:
EnterSameAdminPassword = Ponovite novo geslo administratorja/ke:
InitWarning = Med incializacijo bodo VSI PODATKI z vašega trdega diska IZBRISANI!
ConfirmInitHint = Vsled potrditve vaših dejanj vpišite naslednje besedilo:
ConfirmInit = Da, zbirši vse podatke!
PartitionInfo = trenutna porazdelitev trdega diska:
IPAddress = IP CryptoBoxa:
TimeOut = Čas preklica deaktivacije kriptiranega datotečnega sistema:(v minutah)
EmptyLog = Dnevnik CryptoBoxa je prazen.
SelectLanguage = Jezikovne nastavitve:
RedirectNote = Kliknite če vaš iskalnik ne podpira avtomatične preusmeritve.
ProjectHomePage = Spletna stran projekta
ProjectNote = CryptoBox je projekt
DoUmount = Deaktivacija kriptiranega datotečnega sistema
DoMount = Aktivacija kriptiranega datotečnega sistema
Configuration = Konfiguracija
CryptoIsActive = Kriptirani podatki so dostopni.
CryptoIsDown = Kriptirani podatki soso zaèiteni pred kakr nimkoli dostopom.
}
Button {
DoInit = Zagon CryptoBoxa
SaveConfig = Shrani konfiguracijo
Update = Osveži
Mount = Aktivacija kriptiranega datotečnega sistema
Umount = Deaktivacija kriptiranega datotečnega sistema
Config = Konfiguracija
PowerOff = Ugasni
ReBoot = Ponovni zagon
Protocol = Dnevnik
Documentation = Priročnik
Status = Stanje
}
WarningMessage {
InitNotConfirmed {
Title = Potrditev ni uspela
Text = Besedilo mora biti vpisano natanko kot je prikazano!
}
EmptyCryptoPassword {
Title = Nepravilno geslo
Text = Geslo ne sme biti prazno!
}
DifferentCryptoPasswords {
Title = Gesli se ne ujemata!
Text = Obe vnešeni gesli morata biti identični, v zagotovilo, da je vpisano željeno geslo.
}
DifferentAdminPasswords {
Title = Administracijski gesli se ne ujemata
Text = Obe vnešeni gesli morata biti identični, v zagotovilo da je vpisano željeno geslo.
}
WrongAdminPassword {
Title = Napačno administracijsko geslo!
Text = Vnešeno administracijsko geslo je nepravilno. Prosimo poskusite znova!
}
MountFailed {
Title = Aktivacija ni uspela
Text = Kriptiran datotečni sistem se ni aktiviral.Po vsej verjetnosti je bilo geslo napačno.
}
UmountFailed {
Title = Deaktivacija ni uspela
Text = Kriptiran datotečni sistem se ni aktiviral.Datoteke so morda v uporabi. Zaprite vse programe. (naprimer ta nadvse razširjen urejevalnik besedil). V primeru nuje ugasnite CryptoBox!
}
NotInitialized {
Title = Konfiguracija ni najdena
Text = CryptoBox še ni bil konfiguriran.
}
InitNotFinished {
Title = Zagon še ni dovršen
Text = Zagon bo dovršen v nekaj minutah. Po končanem zagonu bo ta možnost omogočena.
}
IsMounted {
Title = Že aktivno
Text = Kriptiran datotečni sistem je že aktiviran.
}
NotMounted {
Title = Onemogočeno
Text = Kriptiran datotečni sistem trenutno ni aktiven.
}
AlreadyConfigured {
Title = Konfiguracija uspela
Text = CryptoBox je đe bil konfiguriran. Če ponovno zaženete bodo vsi podatki izbrisani!
}
InvalidLanguage {
Title = Nepravilna izbira jezika
Text = Izbrani jezik ni na voljo!
}
InvalidIP {
Title = Napačen IP naslov
Text = Izbran omrežni naslov ni veljaven!
}
InvalidTimeOut {
Title = Nepravilen čas preklica
Text = Izbran čas preklica ni veljaven!
}
ConfigTimeOutFailed {
Title = Napaka med spremembo časa preklica
Text = Časa preklica ne morete spremeniti!
}
ConfigLanguageFailed {
Title = Napaka med spremembo jezikovnih nastavitev
Text = Spreminjanje jezikovnih nastavitev ni mogoče.
}
ConfigIPFailed {
Title = Napaka med spreminjanjem omrežnega naslova.
Text = Spreminjanje omrežnega naslova ni mogoče.
}
IPAddressChanged {
Title = Sprememba omrežnega naslova
Text = Omrežni naslov je spremenjen. V nekaj sekundah boste preusmerjeni na nov naslov.
}
}
SuccessMessage {
InitRunning {
Title = Zagon poteka
Text = Zagon bo dokončan v ozadju.
}
ConfigSaved {
Title = Konfiguracija spravljena
Text = Nove nastavitve so sprejete.
}
MountDone {
Title = Kriptiran datotečni sistem aktiviran
Text = Kriptiran datotečni sistem je na voljo.
}
UmountDone {
Title = Kriptiran datotečni sistem deaktiviran.
Text = Kriptiran datotečni sistem je varovan pred vstopom.
}
PowerOff {
Title = Ugasni
Text = CryptoBox se zaustavlja. V nekaj sekundah ga lahko izklopite.(v kolikor se to ne zgodi avtomatično).
}
ReBoot {
Title = Ponovni zagon
Text = CryptoBox se zaganja. V nekaj sekundah bo zopet na voljo.
}
}
ErrorMessage {
UnknownAction {
Title = Neznan zahtevek
Text = Podali ste nedefiniran zahtevek.
}
NoSSL {
Title = Nekriptirana povezava
Text = CryptoBox sprejme le kriptirane povezave (https), da je geslo zaščiteno pred radovednimi očmi. V nekaj sekundah bo kriptirana povezava vzpostavljena.
}
InitFailed {
Title = Zagon ni uspel
Text = Prosim pošljite dnevnik (poglejte zgoraj) razvijalcem CryptoBoxa (cryptobox@systemausfall.org).
}
NoHardDisk {
Title = Ni trdega diska
Text = Primeren trdi disk za shranjenje kriptiranega datotečnega sistema ni zaznan. Poskrbite da bo med zagonom BIOS zaznal trdi disk.
}
}
Status = $Id$
Title {
Top = The CryptoBox
Slogan = Privatnost v vsako vas!
Init = CryptoBox zagon
Mount = Aktivacija kriptiranih podatkov
Umount = Deaktivacija kriptiranih podatkov
Config = CryptoBox konfiguracija
Log = CryptoBox dnevnik
ShutDown = Ugasni
Status = Stanje
}
Text {
EnterCurrentCryptoPassword = Vpišite geslo:
EnterNewCryptoPassword = Vpišite novo geslo:
EnterSameCryptoPassword = Ponovite novo geslo:
EnterCurrentAdminPassword = Vnesite trenutno obstoječe geslo administratorja/ke:
EnterNewAdminPassword = Vnesite novo geslo administratorja/ke:
EnterSameAdminPassword = Ponovite novo geslo administratorja/ke:
InitWarning = Med incializacijo bodo VSI PODATKI z vašega trdega diska IZBRISANI!
ConfirmInitHint = Vsled potrditve vaših dejanj vpišite naslednje besedilo:
ConfirmInit = Da, zbirši vse podatke!
PartitionInfo = trenutna porazdelitev trdega diska:
IPAddress = IP CryptoBoxa:
TimeOut = Čas preklica deaktivacije kriptiranega datotečnega sistema:(v minutah)
EmptyLog = Dnevnik CryptoBoxa je prazen.
SelectLanguage = Jezikovne nastavitve:
RedirectNote = Kliknite če vaš iskalnik ne podpira avtomatične preusmeritve.
ProjectHomePage = Spletna stran projekta
ProjectNote = CryptoBox je projekt
DoUmount = Deaktivacija kriptiranega datotečnega sistema
DoMount = Aktivacija kriptiranega datotečnega sistema
Configuration = Konfiguracija
CryptoIsActive = Kriptirani podatki so dostopni.
CryptoIsDown = Kriptirani podatki soso zaèiteni pred kakr nimkoli dostopom.
}
Button {
DoInit = Zagon CryptoBoxa
SaveConfig = Shrani konfiguracijo
Update = Osveži
Mount = Aktivacija kriptiranega datotečnega sistema
Umount = Deaktivacija kriptiranega datotečnega sistema
Config = Konfiguracija
PowerOff = Ugasni
ReBoot = Ponovni zagon
Protocol = Dnevnik
Documentation = Priročnik
Status = Stanje
System = System
}
WarningMessage {
InitNotConfirmed {
Title = Potrditev ni uspela
Text = Besedilo mora biti vpisano natanko kot je prikazano!
}
EmptyCryptoPassword {
Title = Nepravilno geslo
Text = Geslo ne sme biti prazno!
}
DifferentCryptoPasswords {
Title = Gesli se ne ujemata!
Text = Obe vnešeni gesli morata biti identični, v zagotovilo, da je vpisano željeno geslo.
}
DifferentAdminPasswords {
Title = Administracijski gesli se ne ujemata
Text = Obe vnešeni gesli morata biti identični, v zagotovilo da je vpisano željeno geslo.
}
WrongAdminPassword {
Title = Napačno administracijsko geslo!
Text = Vnešeno administracijsko geslo je nepravilno. Prosimo poskusite znova!
}
MountFailed {
Title = Aktivacija ni uspela
Text = Kriptiran datotečni sistem se ni aktiviral.Po vsej verjetnosti je bilo geslo napačno.
}
UmountFailed {
Title = Deaktivacija ni uspela
Text = Kriptiran datotečni sistem se ni aktiviral.Datoteke so morda v uporabi. Zaprite vse programe. (naprimer ta nadvse razširjen urejevalnik besedil). V primeru nuje ugasnite CryptoBox!
}
NotInitialized {
Title = Konfiguracija ni najdena
Text = CryptoBox še ni bil konfiguriran.
}
InitNotFinished {
Title = Zagon še ni dovršen
Text = Zagon bo dovršen v nekaj minutah. Po končanem zagonu bo ta možnost omogočena.
}
IsMounted {
Title = Že aktivno
Text = Kriptiran datotečni sistem je že aktiviran.
}
NotMounted {
Title = Onemogočeno
Text = Kriptiran datotečni sistem trenutno ni aktiven.
}
AlreadyConfigured {
Title = Konfiguracija uspela
Text = CryptoBox je đe bil konfiguriran. Če ponovno zaženete bodo vsi podatki izbrisani!
}
InvalidLanguage {
Title = Nepravilna izbira jezika
Text = Izbrani jezik ni na voljo!
}
ConfigLanguageFailed {
Title = Napaka med spremembo jezikovnih nastavitev
Text = Spreminjanje jezikovnih nastavitev ni mogoče.
}
}
SuccessMessage {
InitRunning {
Title = Zagon poteka
Text = Zagon bo dokončan v ozadju.
}
ConfigSaved {
Title = Konfiguracija spravljena
Text = Nove nastavitve so sprejete.
}
MountDone {
Title = Kriptiran datotečni sistem aktiviran
Text = Kriptiran datotečni sistem je na voljo.
}
UmountDone {
Title = Kriptiran datotečni sistem deaktiviran.
Text = Kriptiran datotečni sistem je varovan pred vstopom.
}
PowerOff {
Title = Ugasni
Text = CryptoBox se zaustavlja. V nekaj sekundah ga lahko izklopite.(v kolikor se to ne zgodi avtomatično).
}
ReBoot {
Title = Ponovni zagon
Text = CryptoBox se zaganja. V nekaj sekundah bo zopet na voljo.
}
}
ErrorMessage {
UnknownAction {
Title = Neznan zahtevek
Text = Podali ste nedefiniran zahtevek.
}
NoSSL {
Title = Nekriptirana povezava
Text = CryptoBox sprejme le kriptirane povezave (https), da je geslo zaščiteno pred radovednimi očmi. V nekaj sekundah bo kriptirana povezava vzpostavljena.
}
InitFailed {
Title = Zagon ni uspel
Text = Prosim pošljite dnevnik (poglejte zgoraj) razvijalcem CryptoBoxa (cryptobox@systemausfall.org).
}
NoHardDisk {
Title = Ni trdega diska
Text = Primeren trdi disk za shranjenje kriptiranega datotečnega sistema ni zaznan. Poskrbite da bo med zagonom BIOS zaznal trdi disk.
}
NoDocumentation {
Title = No documentation
Text = There is no documentation available!
}
}

69
plugins/date/date.py Normal file
View file

@ -0,0 +1,69 @@
import CryptoBoxPlugin
class date(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "system" ]
requestAuth = False
rank = 10
def doAction(self, store=None, year=None, month=None, day=None, hour=None, minute=None):
import datetime
if store:
try:
year, month, day = int(year), int(month), int(day)
hour, minute = int(hour), int(minute)
new_date = datetime.datetime(year, month, day, hour, minute)
except ValueError:
self.hdf["Data.Warning"] = "Plugins.date.InvalidDate"
self.__prepareFormData()
return "form_date"
date = "%02d%02d%02d%02d%d" % (month, day, hour, minute, year)
if self.__setDate(date):
self.cbox.log.info("changed date to: %s" % date)
self.hdf["Data.Success"] = "Plugins.date.DateChanged"
return None
else:
## a failure should usually be an invalid date (we do not check it really)
self.cbox.log.info("failed to set date: %s" % date)
self.hdf["Data.Warning"] = "Plugins.date.InvalidDate"
self.__prepareFormData()
return "form_date"
else:
self.__prepareFormData()
return "form_date"
def getStatus(self):
now = self.__getCurrentDate()
return "%d/%d/%d/%d/%d/%d" % (now.year, now.month, now.day, now.hour, now.minute, now.second)
def __prepareFormData(self):
date = self.__getCurrentDate()
self.hdf[self.hdf_prefix + "year"] = date.year
self.hdf[self.hdf_prefix + "month"] = date.month
self.hdf[self.hdf_prefix + "day"] = date.day
self.hdf[self.hdf_prefix + "hour"] = date.hour
self.hdf[self.hdf_prefix + "minute"] = date.minute
def __getCurrentDate(self):
import datetime
return datetime.datetime(2000,1,1).now()
def __setDate(self, date):
import subprocess
import os
proc = subprocess.Popen(
shell = False,
args = [
self.cbox.prefs["Programs"]["super"],
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
"plugin",
os.path.join(self.pluginDir, "root_action.py"),
date])
proc.wait()
return proc.returncode == 0

44
plugins/date/form_date.cs Normal file
View file

@ -0,0 +1,44 @@
<?cs # $Id$ ?>
<h1><?cs var:html_escape(Lang.Plugins.date.Title.ConfigDate) ?></h1>
<?cs call:handle_messages() ?>
<?cs call:print_form_header("set_date", "date") ?>
<p><label for="date"><?cs var:html_escape(Lang.Plugins.date.Text.Date) ?>: </label><br/>
<select id="date" name="day" tabindex="1" size="0"><?cs
loop: x = #1, #31, #1 ?>
<?cs if:x == Data.Plugins.date.day ?><option selected="selected"><?cs
else ?><option><?cs /if ?><?cs var:x ?></option><?cs /loop ?>
</select>
<select name="month" tabindex="2" size="0"><?cs
loop: x = #1, #12, #1 ?>
<?cs if:x == Data.Plugins.date.month ?><option selected="selected" <?cs
else ?><option <?cs /if ?>value="<?cs var:x ?>"><?cs
var:html_escape(Lang.Plugins.date.Text.Months[x]) ?></option><?cs /loop ?>
</select>
<select name="year" tabindex="3" size="0"><?cs
loop: x = #2006, #2025, #1 ?>
<?cs if:x == Data.Plugins.date.year ?><option selected="selected"><?cs
else ?><option><?cs /if ?><?cs var:x ?></option><?cs /loop ?>
</select></p>
<p><label for="time"><?cs var:html_escape(Lang.Plugins.date.Text.Time) ?>: </label><br/>
<select id="time" name="hour" tabindex="4" size="0"><?cs
loop: x = #0, #23, #1 ?>
<?cs if:x == Data.Plugins.date.hour ?><option selected="selected"><?cs
else ?><option><?cs /if ?><?cs if:x<10 ?>0<?cs /if ?><?cs var:x ?></option><?cs /loop ?>
</select>&nbsp;:&nbsp;
<select name="minute" tabindex="5" size="0"><?cs
loop: x = #0, #59, #1 ?>
<?cs if:x == Data.Plugins.date.minute ?><option selected="selected"><?cs
else ?><option><?cs /if ?><?cs if:x<10 ?>0<?cs /if ?><?cs var:x ?></option><?cs /loop ?>
</select></p>
<input type="hidden" name="store" value="yes" />
<button type="submit" tabindex="6"><?cs var:html_escape(Lang.Plugins.date.Button.ConfigDate) ?></button>
</form>

35
plugins/date/lang/en.hdf Normal file
View file

@ -0,0 +1,35 @@
Name = Change date and time
Link = Set date/time
Title.ConfigDate = Date and time setting
Button.ConfigDate = Set date and time
Text.Date = Date
Text.Time = Time
Text.Months {
1 = January
2 = February
3 = March
4 = April
5 = May
6 = June
7 = July
8 = August
9 = September
10 = October
11 = November
12 = December
}
SuccessMessage.DateChanged {
Title = Date changed
Text = The date was changed successfully.
}
WarningMessage {
InvalidDate {
Title = Invalid value
Text = An invalid value for date or time was supplied. Please try again.
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

36
plugins/date/root_action.py Executable file
View file

@ -0,0 +1,36 @@
#!/usr/bin/env python2.4
## necessary: otherwise CryptoBoxRootActions.py will refuse to execute this script
PLUGIN_TYPE = "cryptobox"
DATE_BIN = "/bin/date"
import subprocess
import re
import sys
import os
if __name__ == "__main__":
args = sys.argv[1:]
self_bin = sys.argv[0]
if len(args) > 1:
sys.stderr.write("%s: too many arguments (%s)\n" % (self_bin, args))
sys.exit(1)
if len(args) == 0:
sys.stderr.write("%s: no argument supplied\n" % self_bin)
sys.exit(1)
if re.search(u'\D', args[0]):
sys.stderr.write("%s: illegal argument (%s)\n" % (self_bin, args[0]))
sys.exit(1)
proc = subprocess.Popen(
shell = False,
stdout = subprocess.PIPE,
args = [DATE_BIN, args[0]])
proc.wait()
sys.exit(proc.returncode)

60
plugins/date/unittests.py Normal file
View file

@ -0,0 +1,60 @@
import WebInterfaceTestClass
class unittests(WebInterfaceTestClass.WebInterfaceTestClass):
def test_get_date(self):
date = self._getCurrentDate()
def test_change_date(self):
now = self._getCurrentDate()
## copy current time
new_date = dict(now)
## move three minutes forward (more is not nice because of screensavers)
new_date["minute"] = (now["minute"] + 3) % 60
## in case of minute-overflow we also have to move the hour a little bit forward
new_date["hour"] = now["hour"] + ((now["minute"] + 3) / 60)
## move forward ...
self._setDate(new_date)
self.assertEquals(new_date, self._getCurrentDate())
## ... and backward
self._setDate(now)
self.assertEquals(now, self._getCurrentDate())
def _getCurrentDate(self):
date_url = self.URL + "date"
self.register_auth(date_url)
self.cmd.go(date_url)
self.cmd.find("Data.Status.Plugins.date=([0-9]+/[0-9]+/[0-9]+/[0-9]+/[0-9]+/[0-9]+)$", "m")
dateNumbers = self.locals["__match__"].split("/")
self.assertEquals(len(dateNumbers), 6)
## we ignore seconds
dateField = {
"year" : int(dateNumbers[0]),
"month" : int(dateNumbers[1]),
"day" : int(dateNumbers[2]),
"hour" : int(dateNumbers[3]),
"minute" : int(dateNumbers[4])}
return dateField
def _setDate(self, date):
"""for now we have to use this function instead of the one below"""
date_url = self.URL + "date?store=1&year=%d&month=%d&day=%d&hour=%d&minute=%d" % (date["year"], date["month"], date["day"], date["hour"], date["minute"])
self.register_auth(date_url)
self.cmd.go(date_url)
def _setDateBroken(self, date):
"""this should work, but the parsing of twill seems to be broken"""
date_url = self.URL + "date"
self.register_auth(date_url)
self.cmd.go(date_url)
self.cmd.formvalue("set_date", "year", str(date["year"]))
self.cmd.formvalue("set_date", "month", str(date["month"]))
self.cmd.formvalue("set_date", "day", str(date["day"]))
self.cmd.formvalue("set_date", "hour", str(date["hour"]))
self.cmd.formvalue("set_date", "minute", str(date["minute"]))
self.cmd.submit()

17
plugins/disks/disks.cs Normal file
View file

@ -0,0 +1,17 @@
<?cs # $Id$ ?>
<h1><?cs var:html_escape(Lang.Plugins.disks.Title.Disks) ?></h1>
<?cs call:handle_messages() ?>
<?cs # TODO: add no-disks-available warning ?>
<?cs if:subcount(Data.Disks) == 0 ?>
<?cs call:hint(Lang.Plugins.disks.Text.NoDisksAvailable) ?>
<?cs else ?>
<?cs # we use "loop" instead of "each" to keep the order of the disks ?>
<?cs loop: index = #0, subcount(Data.Disks)-1, #1 ?>
<?cs call:show_volume(Data.Disks[index]) ?>
<?cs /loop ?>
<?cs /if ?>

17
plugins/disks/disks.py Normal file
View file

@ -0,0 +1,17 @@
import CryptoBoxPlugin
class disks(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "menu" ]
requestAuth = False
rank = 10
def doAction(self):
self.cbox.reReadContainerList()
return "disks"
def getStatus(self):
return "TODO"

View file

@ -0,0 +1,6 @@
Name = Datenträger-Übersicht
Link = Datenträger
Title.Disks = Verfügbare Datenträger
Text.NoDisksAvailable = Es sind keine Datenträger verfügbar!

View file

@ -0,0 +1,6 @@
Name = Disk overview
Link = Disks
Title.Disks = Available disks
Text.NoDisksAvailable = No available disks were found!

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -0,0 +1,9 @@
import WebInterfaceTestClass
class unittests(WebInterfaceTestClass.WebInterfaceTestClass):
def test_read_form(self):
'''display all devices'''
self.cmd.go(self.URL + "disks?weblang=en")
self.cmd.find("Disks")

View file

@ -0,0 +1,95 @@
import CryptoBoxPlugin
from CryptoBoxExceptions import *
class format_fs(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "volume" ]
requestAuth = True
rank = 60
## map filesystem types to the appropriate arguments for 'mkfs'
fsTypes = {
"windows": "vfat",
"linux": "ext3" }
containerTypes = [ "luks", "plain" ]
def doAction(self, store=None, fs_type="windows", container_type="luks", crypto_password=None, crypto_password2=None, confirm=None):
if not fs_type in self.fsTypes.keys():
self.cbox.info
return "format_volume"
self.hdf[self.hdf_prefix + "fs_type"] = fs_type
self.hdf[self.hdf_prefix + "container_type"] = container_type
for t in self.fsTypes.keys():
self.hdf[self.hdf_prefix + "fs_types." + t] = t
if store == "step1":
if not confirm:
self.cbox.log.warn("missing confirmation for formatting of filesystem: %s" % self.device)
self.hdf["Data.Warning"] = "Plugins.format_fs.FormatNotConfirmed"
return "volume_format"
if container_type == "luks":
return "volume_format_luks"
elif container_type == "plain":
return self.__format_plain(fs_type)
elif store == "step2":
if container_type == "luks":
return self.__format_luks(fs_type, crypto_password, crypto_password2)
else:
self.cbox.log.info("invalid input value for 'container_type': %s" % container_type)
return "volume_format"
elif store:
self.cbox.log.info("invalid input value for 'store': %s" % store)
return "volume_format"
else:
return "volume_format"
def getStatus(self):
return "no status"
def __format_plain(self, fsType):
try:
container = self.cbox.getContainer(self.device)
container.create(container.Types["plain"])
except CBVolumeIsActive:
self.hdf["Data.Warning"] = "VolumeMayNotBeMounted"
self.cbox.log.info("initialization is not possible as long as the device (%s) is mounted" % self.device)
return None
except CBContainerError, errMsg:
self.hdf["Data.Warning"] = "Plugins.format_fs.FormatFailed"
self.cbox.log.warn("initialization of device '%s' failed" % self.device)
self.cbox.log.warn("reason: %s" % errMsg)
return "volume_format"
else:
self.cbox.log.info("successfully initialized device '%s'" % self.device)
return None
def __format_luks(self, fsType, pw, pw2):
if not pw:
self.hdf["Data.Warning"] = "EmptyPassword"
self.cbox.log.warn("no crypto password was supplied for initialization of device '%s'" % self.device)
return "volume_format"
if pw != pw2:
self.hdf["Data.Warning"] = "DifferentPasswords"
self.cbox.log.warn("the crypto password was not repeated correctly for initialization of device '%s'" % self.device)
return "volume_format"
container = self.cbox.getContainer(self.device)
try:
container.create(container.Types["luks"], pw)
except CBVolumeIsActive:
self.hdf["Data.Warning"] = "VolumeMayNotBeMounted"
self.cbox.log.info("initialization is not possible as long as the device (%s) is mounted" % self.device)
return None
except CBContainerError, errMsg:
self.hdf["Data.Warning"] = "Plugins.format_fs.FormatFailed"
self.cbox.log.warn("initialization of device '%s' failed" % self.device)
self.cbox.log.warn("reason: %s" % errMsg)
return "volume_format"
else:
self.hdf["Data.Success"] = "Plugins.format_fs.FormatSuccess"
self.cbox.log.info("successfully initialized device '%s'" % self.device)
return None

View file

@ -0,0 +1,49 @@
Name = Create filesystems
Link = Format
Title.Format = Initializing filesystem
Button.Format = Initialize filesystem
Text {
Confirm = Yes, I know what I am doing!
FSType = Filesystem type
IsEncrypted = Encryption
Yes = Yes
No = No
}
AdviceMessage {
FormatWarning {
Text = All data of the selected filesystem will get lost!
}
UnmountBeforeInit {
Text = You must deactivate this volume before you may initialize it.
Link.Text = Deactive volume now
Link.Rel = volume_mount
Link.Attr1.name = action
Link.Attr1.value = umount
Link.Attr2.name = redirect
Link.Attr2.value = format_fs
}
}
SuccessMessage {
FormatSuccess {
Title = Formatting successful
Text = The selected filesystem was successfully formatted.
}
}
WarningMessage {
FormatNotConfirmed {
Title = Confirmation missing
Text = You did not confirm this action by activating the checkbox.
}
FormatFailed {
Title = Formatting failed
Text = Formatting of the selected filesystem failed for unknown reasons - sorry!
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

@ -0,0 +1,10 @@
import WebInterfaceTestClass
class unittests(WebInterfaceTestClass.WebInterfaceTestClass):
def test_read_form(self):
url = self.URL + "format_fs?weblang=en&device=%2Fdev%2Floop1"
self.register_auth(url)
self.cmd.go(url)
self.cmd.find('Initializing filesystem')

View file

@ -0,0 +1,37 @@
<?cs # $Id$ ?>
<?cs include:Settings.TemplateDir + "/show_volume_header.cs" ?>
<h2><?cs var:html_escape(Lang.Plugins.format_fs.Title.Format) ?></h2>
<?cs call:handle_messages() ?>
<?cs if:Data.CurrentDisk.active ?>
<?cs call:hint("Plugins.format_fs.UnmountBeforeInit") ?>
<?cs else ?>
<?cs call:hint("Plugins.format_fs.FormatWarning") ?>
<?cs call:print_form_header("set_type", "format_fs") ?>
<p><label for="fs_type"><?cs var:html_escape(Lang.Plugins.format_fs.Text.FSType)
?>: </label><select name="fs_type" id="fs_type" size="0">
<?cs each:x = Data.Plugins.format_fs.fs_types ?>
<option <?cs if:x == "windows" ?>selected="selected"<?cs /if ?>><?cs var:html_escape(x) ?></option><?cs /each ?>
</select></p>
<p><label for="container_type"><?cs var:html_escape(Lang.Plugins.format_fs.Text.IsEncrypted)
?>: </label><select name="container_type" id="container_type">
<option value="luks" <?cs if:Data.Plugins.format_fs.container_type != "plain" ?>selected="selected"<?cs /if ?>><?cs var:html_escape(Lang.Plugins.format_fs.Text.Yes) ?></option>
<option value="plain" <?cs if:Data.Plugins.format_fs.container_type == "plain" ?>selected="selected"<?cs /if ?>><?cs var:html_escape(Lang.Plugins.format_fs.Text.No) ?></option>
</select></p>
<p><input type="checkbox" name="confirm" value="1" id="confirm" /><label for="confirm"><?cs var:html_escape(Lang.Plugins.format_fs.Text.Confirm) ?></label></p>
<input type="hidden" name="device" value="<?cs var:Data.CurrentDisk.device ?>" />
<input type="hidden" name="store" value="step1" />
<button type="submit"><?cs var:html_escape(Lang.Plugins.format_fs.Button.Format) ?></button>
</form>
<?cs /if ?>
<?cs include:Settings.TemplateDir + "/show_volume_footer.cs" ?>

View file

@ -0,0 +1,32 @@
<?cs # $Id$ ?>
<?cs include:Settings.TemplateDir + "/show_volume_header.cs" ?>
<h2><?cs var:html_escape(Lang.Plugins.format_fs.Title.Format) ?></h2>
<?cs call:handle_messages() ?>
<?cs if:Data.CurrentDisk.active ?>
<?cs call:hint("Plugins.format_fs.UnmountBeforeInit") ?>
<?cs else ?>
<?cs call:hint("Plugins.format_fs.FormatWarning") ?>
<?cs call:print_form_header("set_luks", "format_fs") ?>
<p><?cs var:html_escape(Lang.Plugins.format_fs.Text.FSType) ?>: <?cs var:html_escape(Data.Plugins.format_fs.fs_type) ?></p>
<p><?cs var:html_escape(Lang.Plugins.format_fs.Text.IsEncrypted) ?>: <?cs if:Data.Plugins.format_fs.container_type == "luks" ?><?cs
var:html_escape(Lang.Plugins.format_fs.Text.Yes) ?><?cs else ?><?cs
var:html_escape(Lang.Plugins.format_fs.Text.No) ?><?cs /if ?></p>
<p><label for="crypto_password"><?cs var:html_escape(Lang.Text.EnterNewPassword) ?>: </label> <input type="password" id="crypto_password" name="crypto_password" /></p>
<p><label for="crypto_password2"><?cs var:html_escape(Lang.Text.EnterSamePassword) ?>: </label> <input type="password" id="crypto_password2" name="crypto_password2" /></p>
<input type="hidden" name="device" value="<?cs var:Data.CurrentDisk.device ?>" />
<input type="hidden" name="fs_type" value="<?cs var:html_escape(Data.Plugins.format_fs.fs_type) ?>" />
<input type="hidden" name="container_type" value="<?cs var:html_escape(Data.Plugins.format_fs.container_type) ?>" />
<input type="hidden" name="store" value="step2" />
<button type="submit"><?cs var:html_escape(Lang.Plugins.format_fs.Button.Format) ?></button>
</form>
<?cs /if ?>
<?cs include:Settings.TemplateDir + "/show_volume_footer.cs" ?>

9
plugins/help/doc.cs Normal file
View file

@ -0,0 +1,9 @@
<?cs # $Id$ ?>
<div id="doc">
<?cs call:handle_messages() ?>
<?cs include:Settings.DocDir + '/' + Settings.Language + '/' + Data.Plugins.help.Page + '.html' ?>
</div>

25
plugins/help/help.py Normal file
View file

@ -0,0 +1,25 @@
import CryptoBoxPlugin
class help(CryptoBoxPlugin.CryptoBoxPlugin):
pluginCapabilities = [ "menu" ]
requestAuth = False
rank = 80
def doAction(self, page=""):
'''prints the offline wikipage
'''
import re
## check for invalid characters
if page and not re.search(u'\W', page):
self.hdf[self.hdf_prefix + "Page"] = page
else:
## display this page as default help page
self.hdf[self.hdf_prefix + "Page"] ="CryptoBoxUser"
return "doc"
def getStatus(self):
return "TODO"

5
plugins/help/lang/en.hdf Normal file
View file

@ -0,0 +1,5 @@
Name = User manual
Link = Help
Title.Help = User manual

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

29
plugins/help/unittests.py Normal file
View file

@ -0,0 +1,29 @@
import WebInterfaceTestClass
from twill.errors import *
class unittests(WebInterfaceTestClass.WebInterfaceTestClass):
def test_help_pages(self):
'''help pages should be available in different languages'''
## check english help pages
self.cmd.go(self.URL + "help?weblang=en")
self.cmd.find("Table of Contents")
self.cmd.find("Getting started")
self.cmd.go(self.URL + "help?weblang=de")
self.cmd.find("Table of Contents")
self.cmd.find("Wie geht es los")
self.cmd.go(self.URL + "help?weblang=si")
self.assertRaises(TwillAssertionError, self.cmd.notfind, "Table of Contents")
#TODO: add a slovene text here, as soon as the help is translated
self.cmd.go(self.URL + "help?weblang=fr")
self.assertRaises(TwillAssertionError, self.cmd.notfind, "Table of Contents")
#TODO: add a french text here, as soon as the help is translated
## test a random language - it should fall back to english
self.cmd.go(self.URL + "help?weblang=foobar")
self.assertRaises(TwillAssertionError, self.cmd.notfind, "Table of Contents")

View file

@ -0,0 +1,5 @@
Name = Choose interface language
Link = Languages
Title.Language = Choose an interface language

View file

@ -0,0 +1,15 @@
<?cs # $Id$ ?>
<h1><?cs var:html_escape(Lang.Plugins.language_selection.Title.Language) ?></h1>
<?cs call:handle_messages() ?>
<div id="lang">
<ul>
<?cs loop:index = #0, subcount(Data.Languages)-1, #1 ?>
<li><a href="<?cs
call:link("disks", 'weblang', Data.Languages[index].name, '','') ?>" title="<?cs
var:html_escape(Data.Languages[index].link) ?>" /><?cs
var:html_escape(Data.Languages[index].link) ?></a></li><?cs /loop ?>
</ul>
</div>

Some files were not shown because too many files have changed in this diff Show more