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

#!/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)