我正在从命令行程序构建snap,以便从自然语言中猜出linux命令。例如,cal For show calendar。当提出命令时,我需要通过Enter来确认它们。因此,在Enter之后,我希望在我的主机系统上执行cal。
由于以下代码,当程序在主机上本地执行时,我会工作:
let mut child = Command::new(command_name)
.args(command_args)
.stdin(Stdio::inherit())
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.spawn()
.expect("Failed to execute command");但是当我将这个应用程序打包到snap中时,我看到了错误:
➜ gpt-cli show calendar
> Execute.:
cal
Yes
thread 'main' panicked at 'Failed to execute command: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/main.rs:126:26
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace恐怕cal在snap container上不可用,而且我的程序无法访问主机上下文。
所以问题是:我可以访问snap应用程序在主机上执行程序吗?
我正在检查接口,但没有发现与访问主机程序有关的任何东西。
我找到了解决办法:
首先我需要process-control
apps:
gpt-cli:
command: gpt-cli
plugs:
- process-control
- network
- network-bind和
confinement: classic发布于 2023-03-21 08:29:03
经典限制(https://snapcraft.io/docs/classic-confinement)允许这样做,但考虑到经典定义的应用程序拥有完整的系统访问权限,将其放入商店并不容易。
经典限制是一个允许的快速限制级别,相当于传统打包应用程序所具有的完整系统访问权限。它经常被用作一种阻止措施,使开发人员能够发布比当前一组接口和权限所允许的更多访问权限的应用程序。
https://askubuntu.com/questions/1460224
复制相似问题