如何在每次 PC 从挂起状态恢复时自动重新启动 Gnome Shell

如何在每次 PC 从挂起状态恢复时自动重新启动 Gnome Shell

由于我没有收到任何答复这个问题并且每次 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 来模拟按键和鼠标单击。filefilefile

脚本:

  • /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。

我已经使用这个方法一段时间了,效果很好。

相关内容