如何通过脚本实现GNOME Terminal配色方案的定时自动切换(适配Ubuntu 22.04 LTS)
我懂你想要的效果——让已经打开的GNOME Terminal窗口自动切换配色,而不是每次新开窗口指定配置,还要定时在7点切浅色、14点切深色,这个需求确实很贴合日常使用习惯。下面给你一步步实现的方法,亲测在Ubuntu 22.04 LTS上有效:
第一步:获取你的终端配置文件UUID
GNOME Terminal的每个配置文件(比如你用的Unnamed)都有一个唯一的UUID,咱们得先拿到它,后续脚本要用这个来定位配置项。
打开终端,运行下面的命令:
gsettings get org.gnome.Terminal.ProfilesList default
运行后会返回一串类似 'b1dcc9dd-5262-4d8d-a863-c897e6d979b9' 的字符串,把这串内容记下来,后面要用到。
第二步:编写配色切换脚本
创建一个bash脚本,用来切换浅色(black-on-white)和深色(white-on-black)模式。我已经帮你把内置配色的参数都整理好了,你只需要替换里面的UUID为你刚才拿到的即可。
- 打开文本编辑器,创建脚本文件:
nano ~/switch_terminal_theme.sh
- 粘贴下面的内容,记得替换
PROFILE_UUID的值:
#!/bin/bash # 替换成你刚才获取到的Unnamed配置文件UUID PROFILE_UUID="b1dcc9dd-5262-4d8d-a863-c897e6d979b9" PROFILE_PATH="/org/gnome/terminal/legacy/profiles:/:$PROFILE_UUID/" # 切换到浅色模式(black-on-white) switch_to_light() { gsettings set org.gnome.Terminal.Legacy.Profile:$PROFILE_PATH use-theme-colors false gsettings set org.gnome.Terminal.Legacy.Profile:$PROFILE_PATH background-color '#ffffffffffff' gsettings set org.gnome.Terminal.Legacy.Profile:$PROFILE_PATH foreground-color '#000000000000' gsettings set org.gnome.Terminal.Legacy.Profile:$PROFILE_PATH palette "['#000000000000', '#cd31313131', '#00bcbcbcbc', '#e5e5e5e510', '#242424e0e0', '#bcbc13bcbc', '#00bcbcbcbc', '#e5e5e5e5e5', '#6666666666', '#f07f7f7f7f', '#14d4d4d414', '#f0f0f0f033', '#4e4e4ef0f0', '#bcbc13bcbc', '#14d4d4d4d4', '#ffffffffffff']" } # 切换到深色模式(white-on-black) switch_to_dark() { gsettings set org.gnome.Terminal.Legacy.Profile:$PROFILE_PATH use-theme-colors false gsettings set org.gnome.Terminal.Legacy.Profile:$PROFILE_PATH background-color '#000000000000' gsettings set org.gnome.Terminal.Legacy.Profile:$PROFILE_PATH foreground-color '#ffffffffffff' gsettings set org.gnome.Terminal.Legacy.Profile:$PROFILE_PATH palette "['#000000000000', '#cd31313131', '#00bcbcbcbc', '#e5e5e5e510', '#242424e0e0', '#bcbc13bcbc', '#00bcbcbcbc', '#e5e5e5e5e5', '#6666666666', '#f07f7f7f7f', '#14d4d4d414', '#f0f0f0f033', '#4e4e4ef0f0', '#bcbc13bcbc', '#14d4d4d4d4', '#ffffffffffff']" } # 根据参数切换,无参数则自动切换当前模式 if [ "$1" = "light" ]; then switch_to_light elif [ "$1" = "dark" ]; then switch_to_dark else current_bg=$(gsettings get org.gnome.Terminal.Legacy.Profile:$PROFILE_PATH background-color) if [ "$current_bg" = "'#ffffffffffff'" ]; then switch_to_dark else switch_to_light fi fi
保存并退出编辑器(nano里按
Ctrl+O,回车,再按Ctrl+X)。给脚本添加执行权限:
chmod +x ~/switch_terminal_theme.sh
现在你可以测试一下脚本,直接运行~/switch_terminal_theme.sh,看看已经打开的终端窗口是不是自动切换配色了——是的,GNOME Terminal会实时监听配置变化,所以已有窗口会立刻更新。
第三步:设置定时任务(cron)
要实现7点和14点自动切换,咱们用cron来定时执行脚本。不过要注意,cron默认没有GNOME的会话环境变量,所以得指定DBUS_SESSION_BUS_ADDRESS才能让gsettings生效。
先获取你的用户UID和DBUS路径:
运行id -u,会返回你的UID(一般是1000);DBUS路径通常是unix:path=/run/user/你的UID/bus,比如UID是1000的话就是unix:path=/run/user/1000/bus。编辑crontab:
crontab -e
如果是第一次编辑,会让你选择编辑器,选nano就行。
- 在文件末尾添加两行定时任务,替换
your_username为你的用户名,1000为你的UID:
# 每天7:00切换到浅色模式 0 7 * * * DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /home/your_username/switch_terminal_theme.sh light # 每天14:00切换到深色模式 0 14 * * * DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /home/your_username/switch_terminal_theme.sh dark
- 保存并退出,cron会自动加载新的任务。
补充说明
你提到找不到/org目录,这很正常——/org是dconf/gsettings的虚拟路径,不是文件系统里的实际目录,咱们用gsettings命令就能直接操作这些配置项,不用关心实际文件位置。
备注:内容来源于stack exchange,提问作者John Smith

