summaryrefslogtreecommitdiff
path: root/portato/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'portato/__init__.py')
-rw-r--r--portato/__init__.py56
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.")