Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有root权限的GLib run命令_Javascript_Gnome Shell Extensions - Fatal编程技术网

Javascript 具有root权限的GLib run命令

Javascript 具有root权限的GLib run命令,javascript,gnome-shell-extensions,Javascript,Gnome Shell Extensions,我正在编写一个非常简单的gnome扩展供个人使用(javascript) 要运行控制台命令,我使用GLib.spawn_command_line_sync(“命令”) GNOME外壳版本3.36.2 我需要什么 我只需要运行一个命令,但是使用root权限,我如何才能生成类似GLib.spawn_command_line_sync(“sudo命令”)工作 我想使用默认的Authentication Requiredgnome对话框输入密码 我所知道的 我读了很多源代码,找到了对话框的定义,但我不知

我正在编写一个非常简单的gnome扩展供个人使用(javascript)

要运行控制台命令,我使用GLib.spawn_command_line_sync(“命令”)

GNOME外壳版本3.36.2

我需要什么 我只需要运行一个命令,但是使用root权限,我如何才能生成类似GLib.spawn_command_line_sync(“sudo命令”)工作

我想使用默认的
Authentication Required
gnome对话框输入密码

我所知道的 我读了很多源代码,找到了对话框的定义,但我不知道如何使用它,因为我真的找不到一个使用示例


我不知道如何将这两个东西(对话框和GLib)连接在一起。

首先,避免在扩展中使用
GLib.spawn\u command\u line\u sync()
。此函数将与动画和用户交互在同一线程中同步执行,直到完成为止

如果不需要从命令中输出或退出状态,请使用。如果确实需要输出或退出状态,请将
Gio.Subprocess
通信
一起使用

要以用户身份执行特权命令,最简单的方法可能是使用
pkexec
,该方法将使用您想要的对话框(您可以在终端中运行该对话框进行测试):

//带GLib(无输出或成功通知)
let cmd='apt get update';
试一试{
GLib.spawn_命令行异步('pkexec'+cmd);
}捕获(e){
对数误差(e);
}
//使用GSubprocess(输出和成功通知)
让args=['apt-get','update'];
函数privilegedexec(args){
试一试{
让proc=Gio.Subprocess.new(
['pkexec'].concat(args),
Gio.SubprocessFlags.STDOUT_管道| Gio.SubprocessFlags.STDERR_管道
);
进程通信\u utf8\u异步(null,null,(进程,恢复)=>{
试一试{
let[,stdout,stderr]=进程通信\u utf8\u完成(res);
//失败
如果(!proc.get_successful())
抛出新错误(stderr);
//成功
日志(标准输出);
}捕获(e){
对数误差(e);
}
});
}捕获(e){
对数误差(e);
}
}   

首先,避免在扩展中使用GLib.spawn\u命令\u line\u sync()
。此函数将与动画和用户交互在同一线程中同步执行,直到完成为止

如果不需要从命令中输出或退出状态,请使用。如果确实需要输出或退出状态,请将
Gio.Subprocess
通信
一起使用

要以用户身份执行特权命令,最简单的方法可能是使用
pkexec
,该方法将使用您想要的对话框(您可以在终端中运行该对话框进行测试):

//带GLib(无输出或成功通知)
let cmd='apt get update';
试一试{
GLib.spawn_命令行异步('pkexec'+cmd);
}捕获(e){
对数误差(e);
}
//使用GSubprocess(输出和成功通知)
让args=['apt-get','update'];
函数privilegedexec(args){
试一试{
让proc=Gio.Subprocess.new(
['pkexec'].concat(args),
Gio.SubprocessFlags.STDOUT_管道| Gio.SubprocessFlags.STDERR_管道
);
进程通信\u utf8\u异步(null,null,(进程,恢复)=>{
试一试{
let[,stdout,stderr]=进程通信\u utf8\u完成(res);
//失败
如果(!proc.get_successful())
抛出新错误(stderr);
//成功
日志(标准输出);
}捕获(e){
对数误差(e);
}
});
}捕获(e){
对数误差(e);
}
}   

Lifesaver,它工作得非常完美。请为privelegedExec()添加右括号。我不能只编辑一个字符。救生员,它工作得很好。请为privelegedExec()添加右括号。我不能只编辑一个字符。