下列回答演示如何基于 systemd 从挂起状态唤醒后运行脚本。我尝试了这些方法,但无法让 gnome-terminal 出现并运行命令。
#!/bin/sh
if [ "$1" == "post" ]; then
gnome-terminal --command 'compiz --replace &'
为什么它们不起作用?我使用的是 Ubuntu 16.04.2 内核 4.8.0-45-generic。我很好奇为什么我的基于 systemd 的脚本不起作用。我的命令在打开的 gnome-terminal 上有效,但不知何故无法与 systemd-suspend.service 方法一起使用。???
答案1
正如您所知,任何终端仿真器在完成其工作后都已关闭。
但是如果您希望 gnome-terminal 不被关闭,请使用/etc/pm/sleep.d
路径中的这个脚本(这个脚本会导致终端保持打开状态,直到您按下回车键):
sudo nano /etc/pm/sleep.d/myscript
然后将这些内容粘贴到您的脚本中:
#!/bin/bash
case $1 in
thaw|resume) gnome-terminal --command 'bash -c "compiz --replace &; read line"'
;;
esac
然后通过以下命令使其可执行:
sudo chmod a+x /etc/pm/sleep.d/myscript
我希望这对你有用。
更新:
感谢分享。我很好奇为什么我的基于 systemd 的脚本不起作用。我的命令在打开的 gnome-terminal 上有效,但不知何故无法与 systemd-suspend.service 解决方案一起使用。您可以在您的系统上尝试看看它是否有效果吗?您可以将 compriz 命令替换为命令“sleep 20”进行尝试。感谢您的反馈 挂起方式在许多机器上是不同的,有些机器使用
sudo pm-suspend
,有些机器使用systemctl suspend
命令。
如果要systemctl suspend
用于操作系统睡眠,我们可以使用基于 systemd 的脚本(不是使用sudo pm-suspend
。但在某些系统中,当您单击挂起按钮时,操作系统会使用pm-suspend
命令)。但是基于 systemd 的脚本和基于电源管理的脚本彼此之间有一点区别:
在基于 systemd 的脚本中,我们无法运行 GUI 应用程序,因为在这种情况下没有 X 服务器可供连接。
所以您不能使用gnome-terminal
这样的命令gnome-terminal --command 'compiz --replace &'
。如果您想显示 gnome-terminal,您必须使用基于电源管理的脚本。
但对于您来说,使用这个脚本就足够了(不需要 gnome-terminal):
#!/bin/sh
if [ $1 = post ] ; then
compiz --replace &
fi
您可以通过替换以下内容来测试您的touch /home/YOURUSERNAME/Desktop/test.txt
脚本compiz --replace &
:
#!/bin/sh
if [ $1 = post ] ; then
touch /home/YOURUSERNAME/Desktop/test.txt
fi
(请注意,由于在基于 systemd 的脚本中,root 用户运行命令,所以不要使用~/Desktop
而不是/home/YOURUSERNAME/Desktop
因为 root 用户的 ~ 不是您的主目录!)