sudo飞镖/颤振运行过程

时间:2020-06-08 20:46:11

标签: flutter dart flutter-desktop

我想为Mac桌面开发一个flutter应用程序,并使用sudo powermetrics访问macs功率指标,有没有办法在首次运行时向用户要求此命令的sudo特权?

1 个答案:

答案 0 :(得分:0)

嗨,我只是在玩弄颤抖,我正在解决相同的问题。

通常,我们需要从bash调用的GUI版本的sudo。

bash命令运行scacheutil且需要sudo的示例:

/usr/bin/osascript -e 'do shell script "dscacheutil -flushcache  2>&1 etc" with administrator privileges'

然后我试图通过Process.run()快速运行此命令,但没有成功。然后,我创建了测试bash脚本,并尝试使用Process.run()直接运行bash脚本。它告诉我,然后我没有特权。

所以我不得不在Xcode中将我的“应用沙箱”值更改为NO。 我们必须直接在Runner.xcodeproj文件夹内打开macos

enter image description here

然后将“应用程序沙箱”更改为“否”:

enter image description here

不需要,我们无需准备bash脚本:

#!/bin/bash
/usr/bin/osascript -e 'do shell script "dscacheutil -flushcache  2>&1 etc" with administrator privileges'

将其保存在某个地方,最后一步,我们可以将其称为flash脚本。

void main() {

      Process.run('/Users/nikix/Desktop/bash_test.sh',[]).then((result){
      stdout.write(result.stdout);
      stderr.write(result.stderr);
      });
}

现在我正在使用sudo进行GUI提示,它似乎可以工作。但是我真的不知道这是否正确。我在扑朔迷离中很新。

更新:

我已经尝试构建Flutter应用flutter build macos,但是bash脚本无法运行。然后我发现this package called process_run

然后我能够从构建的应用程序运行自定义bash脚本

在您的yaml pubspec.yaml中添加该软件包:

dependencies:
  flutter:
    sdk: flutter
  process_run: any

下一步是允许Sanbox App使用xcode发布该应用:

enter image description here

最后一步,在Dart中运行我们的bash代码:

import 'package:process_run/shell.dart';
void main() {

  var shell = Shell();

  shell.run("""
    #!/bin/bash
    /usr/bin/osascript -e 'do shell script "dscacheutil -flushcache  2>&1 etc" with administrator privileges'
    """).then((result){
      print('Shell script done!');
    }).catchError((onError) {
      print('Shell.run error!');
      print(onError);
    });
};