You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
2.9 KiB
113 lines
2.9 KiB
#!/usr/bin/env python2.7
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Author: Zhang Yueqian zhangyueqian@antiy.cn
|
|
Date: 2022-10-31 11:32:24
|
|
LastEditors: Zhang Yueqian zhangyueqian@antiy.cn
|
|
LastEditTime: 2022-10-31 11:34:16
|
|
FilePath: /screensaver/dialog/medr-screensaver-dialog.py
|
|
Description: 屏保程序 for MEDR项目. 本文件为负责锁屏的部分.
|
|
|
|
提供实际锁屏功能, 支持两个参数: --lock 和 --session-idle
|
|
锁屏包括两个含义: 熄灭屏幕 & 触发lightdm锁定
|
|
--lock: 熄灭屏幕并直接锁定lightdm
|
|
--session-idle: 首先熄灭屏幕, 然后根据系统设置, 如果系统设置为idle后锁屏则锁屏
|
|
"""
|
|
|
|
from argparse import ArgumentParser
|
|
from multiprocessing.managers import BaseManager
|
|
import os, socket
|
|
|
|
MEDR_PIPE = "/tmp/medr-screensaver.sock"
|
|
_command = []
|
|
|
|
|
|
def parse_args():
|
|
argparser = ArgumentParser(add_help=False)
|
|
|
|
argparser.add_argument("-h", "--help", dest="help", action="store_true", help="Show this message and exit.")
|
|
argparser.add_argument("-l", "--lock", dest="lock", action="store_true", help="Locks the screen.")
|
|
argparser.add_argument(
|
|
"--session-idle", dest="session_idle", action="store_true", help="Activated by session idle signal."
|
|
)
|
|
argparser.add_argument(
|
|
"--screensaver",
|
|
dest="screensaver",
|
|
action="store_true",
|
|
help="Locks the screen and shows screensaver immediatelly.",
|
|
)
|
|
|
|
return argparser.parse_args(), argparser.format_help()
|
|
|
|
|
|
def action(args, help):
|
|
if args.help:
|
|
print(help)
|
|
return
|
|
|
|
if args.lock:
|
|
os.system("dm-tool lock")
|
|
return
|
|
|
|
if args.session_idle:
|
|
# if idle-lock checked, locks
|
|
return
|
|
|
|
if args.screensaver:
|
|
os.system("xset dpms force off")
|
|
return
|
|
|
|
print(help)
|
|
|
|
|
|
def get_command():
|
|
return _command
|
|
|
|
|
|
def singleton():
|
|
# 通过client连接已有的BaseManager, 如果失败则自己启动一个, 成功则退出
|
|
BaseManager.register("medr-screensaver")
|
|
m = BaseManager(address=("127.0.0.1", 5000), authkey=b"medr-screensaver")
|
|
try:
|
|
print("Trying connect to %s" % m)
|
|
m.connect()
|
|
except Exception as e:
|
|
print(e)
|
|
else:
|
|
print("Failed, trying start server")
|
|
BaseManager.register("medr-screensaver", callable=get_command)
|
|
m = BaseManager(address=("127.0.0.1", 5000), authkey=b"medr-screensaver")
|
|
m.start()
|
|
|
|
|
|
# 必须先删除
|
|
# try:
|
|
# os.unlink(MEDR_PIPE)
|
|
# except OSError:
|
|
# if os.path.exists(MEDR_PIPE):
|
|
# raise
|
|
|
|
# 指定协议
|
|
server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
|
try:
|
|
server.bind(MEDR_PIPE)
|
|
except socket.error as e:
|
|
# running
|
|
print("Error: ", e)
|
|
print("Running")
|
|
finally:
|
|
# 监听
|
|
server.listen(1)
|
|
|
|
clientsocket, address = server.accept()
|
|
# 接收消息
|
|
data = clientsocket.recv(1024)
|
|
print(data)
|
|
# 关闭socket
|
|
clientsocket.close()
|
|
server.close()
|
|
|
|
if __name__ == "__main__":
|
|
args, msg = parse_args()
|
|
# singleton()
|
|
action(args, msg)
|
|
|