Javascript 具有root权限的GLib run命令
我正在编写一个非常简单的gnome扩展供个人使用(javascript) 要运行控制台命令,我使用GLib.spawn_command_line_sync(“命令”)代码> GNOME外壳版本3.36.2 我需要什么 我只需要运行一个命令,但是使用root权限,我如何才能生成类似GLib.spawn_command_line_sync(“sudo命令”)代码>工作 我想使用默认的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对话框输入密码 我所知道的 我读了很多源代码,找到了对话框的定义,但我不知
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()添加右括号。我不能只编辑一个字符。