如何在Ubuntu 22.04上重新启动Snap应用程序(使用Flutter创建)中的PC?

wwodge7n  于 2023-05-19  发布在  Flutter
关注(0)|答案(1)|浏览(314)

我的电脑上有一个Ubuntu 22.04,我还有一个用Flutter创建的Linux应用程序。我也有一个按钮,用于在我的Flutter应用程序中重新启动操作系统。
我尝试了两种不同的方法:

方法一:

await Process.run("reboot", []);

留言内容:

flutter: Running in chroot, ignoring request.

方法二:

await Process.run('sudo', ['reboot']);

留言内容:

flutter: >>> /etc/sudoers: syntax error near line 54 <<<
sudo: parse error in /etc/sudoers near line 54
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

请告诉我如何在Flutter中运行命令来重启PC。

nnsrf1az

nnsrf1az1#

最后,在尝试了很多尝试之后,我找到了自己的解决方案,并在Bing AI的帮助下。由于快照是容器化的,以防止对计算机的过多访问,因此Snap应用程序中的PC重新启动关机的有效方法是通过dbuslogind发送命令,这是一项管理用户会话和电源管理的服务。为此,我使用了dbus包。例如,以下是重新启动和关闭PC的方法:

void reboot() async {

  // Create a system bus client
  var systemBus = DBusClient.system();

  // Connect to the logind service
  var logind = DBusRemoteObject(systemBus, name: 'org.freedesktop.login1', path: DBusObjectPath('/org/freedesktop/login1'));

  // Call the Reboot method with true as the argument
  await logind.callMethod('org.freedesktop.login1.Manager', 'Reboot', [DBusBoolean(true)]);

  // Close the bus client
  await systemBus.close();
}

void powerOff() async {

  // Create a system bus client
  var systemBus = DBusClient.system();

  // Connect to the logind service
  var logind = DBusRemoteObject(systemBus, name: 'org.freedesktop.login1', path: DBusObjectPath('/org/freedesktop/login1'));

  // Call the PowerOff method with true as the argument
  await logind.callMethod('org.freedesktop.login1.Manager', 'PowerOff', [DBusBoolean(true)]);

  // Close the bus client
  await systemBus.close();
}

相关问题