如何自动切换明暗模式?

如何自动切换明暗模式?

我是以下用户Linux薄荷。我经常希望在 Linux 中拥有的一项功能是能够根据一天中的时间在浅色和深色模式之间切换,就像在 macOS 和移动设备中一样。

我整理了以下脚本用于从浅色模式切换到深色模式:

#!/bin/bash
notify-send "Switching to dark mode"
gsettings set org.cinnamon.desktop.wm.preferences theme Mint-Y-Dark
gsettings set org.cinnamon.desktop.interface gtk-theme Mint-Y-Dark
gsettings set org.cinnamon.theme name Mint-Y-Dark

我还有另一个相反方向的

#!/bin/bash
gsettings set org.cinnamon.desktop.wm.preferences theme Mint-Y
gsettings set org.cinnamon.desktop.interface gtk-theme Mint-Y
gsettings set org.cinnamon.theme name Mint-Y

目前,当我想在两个主题之间切换时,我手动运行这些。

大多数程序都尊重操作系统范围的主题,这意味着这种方法效果出奇地好!然而,我想用这种方法解决三个问题:

  1. 根据一天中的时间自动在亮/暗模式之间切换(如 macOS 中)。我尝试使用cronandanacron但它们不能很好地实现此目的。当我的电脑在关闭一段时间后打开时,我希望它意识到切换时间已经过去并执行模式切换(如在 macOS 和各种移动设备中);
  2. 我希望我的终端(GNOME 终端,Cinnamon 默认)从浅色主题切换到深色主题(反之亦然);和
  3. 我希望我的文本编辑器 (Emacs) 加载浅色/深色主题。

即使只是 (1) 工作也很好!

答案1

最好使用一个脚本来包含所有命令来强制使用浅色或深色模式。这是一个例子:

#!/bin/bash

function set_light_mode () {
    echo "setting light mode"
}

function set_dark_mode () {
    echo "setting dark mode"
}

case "$1" in
    light)
        set_light_mode
        ;;
    dark)
        set_dark_mode
        ;;
    *)
        light_time="0800"
        dark_time="1700"
        d="$(date +"%H%M")"

        if [ "$d" -ge "$light_time" ] && [ "$d" -lt "$dark_time" ]; then
            set_light_mode
        else
            set_dark_mode
        fi
        ;;
esac

现在你可以:

  • 只要你想用一个命令就可以执行它。要么提供第一个参数,dark要么light无论时间如何都设置 X。或者不提供任何参数,由当前时间决定。
  • 在 crontab 中为上述时间(不带参数)或任何时间添加 2 个条目。当您的笔记本电脑打开时,它们将根据当前时间强制执行 X 设置。
  • 使用 GUI 添加一个命令来执行脚本(不带参数)到您最喜欢的 DE 的“自动启动应用程序”中,Xfce、Kde、Gnome 等的过程类似,它们都遵循一些标准规格。您也可以通过控制台来完成此操作。

注意:我们不检查上面的 X 是否正在运行,我猜你的命令不需要它(除非send-notify我猜可能会在 sush 情况下失败)

您可以在上述函数中找到并添加更多命令,以便为您的 DE 或某些程序切换主题、模式等,通过控制台可以完成的任何操作都有详细记录。

相关内容