diff options
author | Ruben Pollan <meskio@sindominio.net> | 2018-03-27 19:57:49 +0200 |
---|---|---|
committer | Kali Kaneko <kali@leap.se> | 2018-03-28 23:51:28 +0200 |
commit | 7242c8264ce67262fe8cba05adb96c5372fb901e (patch) | |
tree | 1e31cb910a55631021e25f35d8e7088794a11998 | |
parent | 8462f36cdb9dbab00d5025ac6d7e4f8581951340 (diff) |
[feat] add autostart for OSX
http://blog.gordn.org/2015/03/implementing-run-on-login-for-your-node.html
-rw-r--r-- | src/leap/bitmask/core/autostart.py | 84 |
1 files changed, 50 insertions, 34 deletions
diff --git a/src/leap/bitmask/core/autostart.py b/src/leap/bitmask/core/autostart.py index c53b8197..b596b7c6 100644 --- a/src/leap/bitmask/core/autostart.py +++ b/src/leap/bitmask/core/autostart.py @@ -20,7 +20,7 @@ Autostart bitmask on user login import os import os.path -from leap.bitmask.system import IS_LINUX, IS_MAC +from leap.bitmask.system import IS_LINUX, IS_MAC, IS_WIN from leap.common.config import get_path_prefix from leap.bitmask.core import flags @@ -32,41 +32,57 @@ Exec=%(exec)s Path=%(path)s Terminal=false """ + config = get_path_prefix(standalone=False) + autostart_pattern = os.path.join(config, 'autostart', '%s.desktop') - def autostart_app(status): - """ - Leave an autostart file in the user's autostart path. +elif IS_MAC: + AUTOSTART = r"""<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" + "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> + <dict> + <key>Label</key> + <string>%(name)s</string> + <key>ProgramArguments</key> + <array> + <string>%(exec)s</string> + </array> + <key>RunAtLoad</key> + <true/> + </dict> +</plist> +""" + autostart_pattern = os.path.join(os.getenv("HOME"), "Library", + "LaunchAgents", "%s.plist") - The bundle could in principle find its own path and add - the path to the bitmaskd binary in the Exec entry. - But for now it's simpler to do autostart only for the debian packages - or any other method that puts bitmask in the path. - On the other hand, we want to reduce the modifications that the bundle - leaves behind. - """ - if not flags.APP_NAME or not flags.EXEC_PATH: - return - config = get_path_prefix(standalone=False) - autostart_file = os.path.join(config, 'autostart', - '%s.desktop' % flags.APP_NAME) - if status == 'on': - _dir = os.path.split(autostart_file)[0] - if not os.path.isdir(_dir): - os.makedirs(_dir) - with open(autostart_file, 'w') as f: - f.write(AUTOSTART % { - 'name': flags.APP_NAME, - 'exec': flags.EXEC_PATH, - 'path': os.getcwd() - }) - elif status == 'off': - try: - os.unlink(autostart_file) - except OSError: - pass +def autostart_app(status): + """ + Leave an autostart file in the user's autostart path. -if IS_MAC: + The bundle could in principle find its own path and add + the path to the bitmaskd binary in the Exec entry. + But for now it's simpler to do autostart only for the debian packages + or any other method that puts bitmask in the path. + On the other hand, we want to reduce the modifications that the bundle + leaves behind. + """ + if IS_WIN or not flags.APP_NAME or not flags.EXEC_PATH: + return - def autostart_app(status): - pass + autostart_file = autostart_pattern % (flags.APP_NAME,) + if status == 'on': + _dir = os.path.split(autostart_file)[0] + if not os.path.isdir(_dir): + os.makedirs(_dir) + with open(autostart_file, 'w') as f: + f.write(AUTOSTART % { + 'name': flags.APP_NAME, + 'exec': flags.EXEC_PATH, + 'path': os.getcwd() + }) + elif status == 'off': + try: + os.unlink(autostart_file) + except OSError: + pass |