首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果文件存在,如何设置polkit规则以锁定关机?

如果文件存在,如何设置polkit规则以锁定关机?
EN

Stack Overflow用户
提问于 2018-02-17 19:16:02
回答 2查看 936关注 0票数 1

我正在编写一个应用程序来控制系统关机,如果一个摆式连接到系统上。

连接吊灯时,它会将其标识符写入文件中。如果未连接,它将删除文件的标识符,然后,如果文件为空,则删除该文件。

然后,我想设置一个polkit规则来控制关闭,使用这个文件。polkit规则检测关闭顺序并检查文件是否存在。如果它存在,不要允许关闭,否则允许它。

我试图将其设置为以下形式:

代码语言:javascript
复制
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.consolekit.system.stop") ||
        action.id.indexOf("org.freedesktop.login1.power-off") == 0) 
    {

        try{    
            polkit.spawn(["/usr/bin/detect_pendrive.sh", subject.user]);        
            return polkit.Result.YES;

        }catch(error){
            return polkit.Result.NO;
        }
    }
});

polkit规则使用帮助程序,并使用一个脚本来检查文件是否存在。

detect_pendrive.sh是这样的:

代码语言:javascript
复制
#!/bin/bash
if ! test -e "/tmp/usbdevinfo" 
then
    exit 0
else
    exit 1
fi

我复制/usr/share/polkit-1/ rule es.d中的规则。但是,当我试图关闭一个摆式连接时,系统只是断电而忽略了这个规则。

我在Debian GNOME和Gentoo肉桂上测试过

问题在哪里?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-19 12:46:33

解决方案:

如前所述,polkit规则在polkit中不运行< 0.106。

然后,我用双重策略解决了这个问题:

如果polkit < 0.106,我创建了这个.pkla文件

代码语言:javascript
复制
[Shutdown]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.stop;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-multiple-sessions;org.xfce.session.xfsm-shutdown-helper
ResultAny=no
ResultInactive=yes
ResultActive=no

为了解决这个问题,我使用链接到两个udev规则的相同脚本来添加和删除规则。此外,要创建和删除该文件,请在挂起连接期间添加.pkla文件,在断开连接期间,如果文件为空,也要删除.pkla文件。

在polkit >= 0.106中,我只需使用初始规则文件,添加一个新操作:

action.id == "org.freedesktop.login1.power-off-multiple-sessions"

规则文件如下:

代码语言:javascript
复制
polkit.addRule(function(action, subject) {
 if (action.id == "org.freedesktop.consolekit.system.stop" ||
    action.id == "org.freedesktop.login1.power-off" ||
    action.id == "org.freedesktop.login1.power-off-multiple-sessions" || 
    action.id == "org.xfce.session.xfsm-shutdown-helper")  
 {

    try{    
        polkit.spawn(["/usr/bin/pendrive-reminder/check_pendrive.sh", subject.user]);        
        return polkit.Result.YES;

    }catch(error){
        polkit.spawn(["/usr/bin/pendrive-reminder/send_notify.sh", subject.user]);
        return polkit.Result.NO;
    }
 }
});
票数 1
EN

Stack Overflow用户

发布于 2018-02-17 22:18:56

你的polkit.rule在我的OpenBSD 6.2 GENERIC.MP#134 amd64上没问题

我不使用控制台,但使用org.xfce.session.policy

我的规则档案:

代码语言:javascript
复制
polkit.addRule (function (action, subject) {
  if (action.id == "org.xfce.session.xfsm-shutdown-helper") {
    try {
      polkit.spawn(["/home/alain/polkitspawn.sh",subject.user]);
        return polkit.Result.YES; 
    }
    catch (error) {
      return "no";
    }
  }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48844992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档