当我启动计算机时,我希望记住我的应用程序在关闭最后一个会话之前打开,例如 Ubuntu,而其他发行版通常会这样做。
谷歌搜索,我发现我可以在启动会话时运行应用程序,配置自动启动文件,但我不想总是在启动时运行相同的程序,而是想重新打开在关闭上一个会话之前打开的程序。
我使用 Fedora spin 和 LXDE。
答案1
显然 LXDE 没有合适的会话管理器。不过,正如您所提到的,我们可以使用自动启动文件。我们需要做的就是在退出桌面之前创建一个正在运行的程序的动态列表。
这是我编写的一个小 bash 脚本,它将解析根 X11 窗口的子窗口,查找要添加到自动启动文件中的应用程序。它有可选的黑名单和白名单。将黑名单用于窗口管理器或任何您不想运行的东西。相反,将白名单用于您始终想要运行的内容。
尝试在 shell 中运行它以查看输出是什么样的,然后您可以查看是否需要将任何内容添加到黑名单中。
在退出 LXDE 之前,您需要将其连接起来以某种方式运行。可能是通过在菜单中添加一个新条目。
例如:scriptnamehere.bash > ~/.config/lxsession/LXDE/autostart
正如您所看到的,这将在每次运行时重写自动启动文件,因此需要白名单。
#!/bin/bash
WINDOWS=($(xwininfo -root -children | \
egrep \"[a-zA-Z]*\" | \
cut -d' ' -f7 | \
sed 's/":\?//g' | \
sort -du))
BLACKLIST=()
WHITELIST=()
for window in ${WINDOWS[@]}; do
# test to see if element in array is an executable
WHICH=$(which $window 2>/dev/null)
# is it in the blacklist?
# if so, move to the next window
for app in ${BLACKLIST[@]}; do
if [[ $app == $window ]]; then
continue 2
fi
done
# otherwise add it to the autostart list
if [[ -f $WHICH ]]; then
APPS[${#APPS[*]}]="$window"
fi
done
# add whitelisted apps
for app in ${WHITELIST[@]}; do
APPS[${#APPS[*]}]="$app"
done
for app in ${APPS[@]}; do
printf "@%s\n" "$app"
done