由于我没有收到任何答复这个问题并且每次 PC 从挂起状态恢复时我都必须手动重新启动 gnome-shell 来纠正扭曲的颜色,我想知道如何在挂起后自动重新启动 Gnome Shell,而不是执行 Alt + F2 - r。
已安装 Gnome 扩展:Dash to Panel 和 Arc Menu。这不是上一个问题的重复。这专门针对从挂起状态退出后自动重新启动 Gnome Shell。问题完全不同。
编辑:按照评论中的建议:
a. 在 /etc/systemd/system 上创建一个名为 restart-gnome-shell.service 的文件并添加以下内容:
[Unit]
Description=Restart Gnome-Shell
Before=sleep.target
StopWhenUnneeded=yes
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStop=-/path/to/script.sh
[Install]
WantedBy=sleep.target
script.sh内容为:
#! /bin/bash
gnome-shell --replace
该脚本具有执行权限,我启用并启动了 systemctl 识别的服务。但这不起作用。
这是从挂起状态唤醒后的状态:
● restart-gnome-shell.service - Restart Gnome-Shell
Loaded: loaded (/etc/systemd/system/restart-gnome-shell.service; disabled; vendor preset: enabled)
Active: inactive (dead)
jul 08 12:51:07 Enrique-PC systemd[1]: Started Restart Gnome-Shell.
jul 08 15:53:08 Enrique-PC systemd[1]: restart-gnome-shell.service: Unit not needed anymore. Stopping.
jul 08 15:53:08 Enrique-PC systemd[1]: Stopping Restart Gnome-Shell...
jul 08 15:53:08 Enrique-PC restart-gnome-shell.sh[2119]: Window manager warning: Unsupported session type
jul 08 15:53:08 Enrique-PC systemd[1]: Stopped Restart Gnome-Shell.
b. 在 /lib/systemd/system-sleep 上创建了一个可执行脚本,内容如下:
case "${1}" in
post)
gnome-shell --replace
;;
esac
它不起作用。
答案1
更改您的脚本:
case "${1}" in
post)
gnome-shell --replace
;;
esac
对此:
#!/bin/sh
case $1/$2 in
pre/*)
echo "Going to $2..."
# Place your pre suspend commands here, or `exit 0`
# if no pre suspend action required
sleep 1
;;
post/*)
echo "Waking up from $2..."
# Place your post suspend (resume) commands here, or `exit 0`
# if no post suspend action required
sleep 2
gnome-shell --replace
;;
esac
肯定你遗漏了#!/bin/sh
脚本的开头部分。其余大部分建议的更改都不是必要的,但具有参考价值。
答案2
我知道这个回复有点晚了,但我会发布我的方法,也许它对某些人有用 :-)。!!! 仅适用于 Xorg!!!。
我发现的解决方案(一个技巧)是创建一个脚本,每次从睡眠状态唤醒时都会在中/lib/systemd/system-sleep
存储一个值(“1”) ,并且我还有另一个始终运行的脚本,用于检查该脚本的内容,当它等于“1”时,它会运行 shell 重启代码,然后将内容更改为“0”。重启 shell 的代码也是一个“技巧”,因为我还没有找到执行此操作的命令,我必须使用 xdotool 来模拟按键和鼠标单击。file
file
file
脚本:
- /lib/systemd/系统睡眠/resume_status
#!/bin/sh
if [ "${1}" == "post" ]; then
sleep 5
echo "1" > PATH-TO-FILE/FILE
fi
sleep 5
用于等待系统进入图形环境
- 用于检查从睡眠状态恢复的用户脚本(放置在您的 HOME 的某个位置):
#!/bin/bash
while true; do
check=$(sed '1q;d' PATH-TO-FILE/FILE)
if [[ "$check" == "1" ]]; then
xdotool key alt+F2
sleep 1
xdotool click 1
xdotool type 'r'
xdotool key Return
echo "0" > PATH-TO-FILE/FILE
fi
sleep 5
done
更改 PATH-TO-FILE/FILE 以符合您的情况并确保已安装 xdotool。
我已经使用这个方法一段时间了,效果很好。