diff options
Diffstat (limited to 'portato/__init__.py')
-rw-r--r-- | portato/__init__.py | 56 |
1 files changed, 33 insertions, 23 deletions
diff --git a/portato/__init__.py b/portato/__init__.py index 653329c..98c019d 100644 --- a/portato/__init__.py +++ b/portato/__init__.py @@ -14,15 +14,16 @@ from __future__ import absolute_import import gettext, locale import sys, os -import subprocess, threading -import atexit from optparse import OptionParser, SUPPRESS_HELP -from . import log -from .constants import LOCALE_DIR, APP, VERSION -from .su import detect_su_command +from .log import start as logstart +from .constants import LOCALE_DIR, APP, VERSION, REVISION from .helper import debug, info, error +# set better version info +if REVISION: + VERSION = '%s (git: %s)' % (VERSION, REVISION) + # listener-handling __listener = None @@ -46,7 +47,7 @@ def get_parser (use_ = False): parser = OptionParser(version = vers, prog = "portato", description = desc, usage = usage) - parser.add_option("--shm", action = "store", nargs = 3, type="long", dest = "shm", + parser.add_option("--mq", action = "store", nargs = 1, type="long", dest = "mq", default = None, help = SUPPRESS_HELP) parser.add_option("-F", "--no-fork", action = "store_true", dest = "nofork", default = False, @@ -54,31 +55,34 @@ def get_parser (use_ = False): return parser -def start(): - +def _sub_start (): # set gettext stuff locale.setlocale(locale.LC_ALL, '') gettext.install(APP, LOCALE_DIR, unicode = True) +def start(): + + # set gettext stuff + _sub_start() + # start logging - log.start(file=False) + logstart(file=False) # run parser (options, args) = get_parser().parse_args() - # close listener at exit - atexit.register(get_listener().close) - if options.nofork or os.getuid() == 0: # start GUI - log.start(file = True) # start logging to file + + # close listener at exit + import atexit + atexit.register(get_listener().close) + + logstart(file = True) # start logging to file from .gui import run info("%s v. %s", _("Starting Portato"), VERSION) - if options.shm: - get_listener().set_send(*options.shm) - else: - get_listener().set_send() + get_listener().set_send(options.mq) try: run() @@ -87,14 +91,14 @@ def start(): else: # start us again in root modus and launch listener - import shm_wrapper as shm + from . import ipc + import subprocess, threading + from .su import detect_su_command - mem = shm.create_memory(1024, permissions=0600) - sig = shm.create_semaphore(InitialValue = 0, permissions = 0600) - rw = shm.create_semaphore(InitialValue = 1, permissions = 0600) + mq = ipc.MessageQueue(None, create = True, exclusive = True) # start listener - lt = threading.Thread(target=get_listener().set_recv, args = (mem, sig, rw)) + lt = threading.Thread(target=get_listener().set_recv, args = (mq,)) lt.setDaemon(False) lt.start() @@ -106,7 +110,7 @@ def start(): su = detect_su_command() if su: debug("Using '%s' as su command.", su.bin) - cmd = su.cmd("%s --no-fork --shm %ld %ld %ld" % (sys.argv[0], mem.key, sig.key, rw.key)) + cmd = su.cmd("%s --no-fork --mq %ld" % (sys.argv[0], mq.key)) sp = subprocess.Popen(cmd, env = env) @@ -124,3 +128,9 @@ def start(): if lt.isAlive(): debug("Listener is still running. Close it.") get_listener().close() + lt.join() + + try: + mq.remove() + except ipc.MessageQueueRemovedError: + debug("MessageQueue already removed. Ignore.") |