V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aqqwiyth
V2EX  ›  macOS

问一个关于系统事件的问题

  •  
  •   aqqwiyth · 2014-01-20 14:01:53 +08:00 · 2349 次点击
    这是一个创建于 3762 天前的主题,其中的信息可能已经有所发展或是发生改变。
    osx 现在有没有这样系统事件接口
    我想锁屏或者屏幕合上的时候执行我指定的shell
    2 条回复    1970-01-01 08:00:00 +08:00
    84840
        1
    84840  
       2014-01-21 09:05:36 +08:00
    可以参考 [使用shell让其在系统空闲一段时间后自动结束指定进程] :

    (下面有代码)

    事情起因:学校的上网账号 同一时间只能登一个,, 而实验室和宿舍都得使用这个账号上网

    所以有时候在离开实验室回去时,会忘记将上网程序退出。导致回宿舍后没法上网, 又得打电话回去让别人帮忙退出。。。

    所以才有此想法。

    在windows上我是用的其自带的计划任务的方法:当系统空闲如15分钟时,就执行结束指定进程


    现在有时候需要使用linux( ubuntu) , 上面没有类似的东西 ,,有个TMOUT ,但是是空闲到时间后,就注销用户(我不想注销)

    故而找shell脚本解决的方法。

    最后找到使用ubuntu 中的屏幕保护进程的状态(他的原理就是当系统空闲一定时间后,自动锁住屏幕), 而这个状态是可以通过

    gnome-screensaver-comman -q命令查询的,,所以
    shell如下:(我的上网程序是mentohust (锐捷的替代品))

    [python] view plaincopy
    #!/bin/sh
    # 本程序用来在空闲一定时间后,结束指定程序
    #
    # /usr/bin/mentohust -k # mentohust 可以用此方法结束mentohust进程

    taskkill()
    {
    if [ $# -ne 2 ]; then
    PID=`ps ax | grep $1 | awk '{if ($0 !~/grep/) {print $1}}'`
    # echo "PID=$PID"
    if [ -n "$PID" ]; then
    kill -9 $PID >/dev/null 2>&1
    fi
    return 0
    fi
    #echo "num:$"
    return 1
    }

    PROCESS="mentohust"

    STATE_ACTIVE="屏幕保护程序状态为不活动"
    STATE_UNACTIVE="屏幕保护程序状态为活动"

    while true
    do
    STATE=`gnome-screensaver-command -q 2>/dev/null`
    if [ "$STATE" = "$STATE_UNACTIVE" ]; then
    taskkill $PROCESS
    elif [ "$STATE" = "$STATE_ACTIVE" ]; then
    eval $PROCESS >/dev/null 2>&1 # 当登陆时,再执行进程. 我想结束的mentohust本来就是守护进程,自动后台执行
    fi
    sleep 30

    done

    让其自动登陆时启动的话,,
    就在~/.bashrc最后加上如:

    /home/xx/bin/killprocess & #"&"不能少,因为是后台运行



    ps: 这个空闲多久的时候就是gnome-screensaver即屏幕保护程序激活时间是一样的。
    如果想改变时间,就改变屏幕保护程序的时间!!

    如果不是桌面环境的话,只是终端时。 可以使用 w -u 命令显示出终端空闲时间 (只是个参考)

    参考1:http://blog.csdn.net/fdl19881/article/details/7420374

    参考2:http://forum.ubuntu.org.cn/viewtopic.php?p=2698762
    aqqwiyth
        2
    aqqwiyth  
    OP
       2014-01-21 09:12:19 +08:00
    @84840 非常感谢您的回复,我的原意其实跟你差不多,就是人不在的时候关闭某些程序

    主要是没有切入点去切入

    实践中
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3732 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:41 · PVG 12:41 · LAX 21:41 · JFK 00:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.