![无法使用 cron、rc.local 或 autostart 将 gsettings 设置为在启动时运行](https://linux22.com/image/830646/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20cron%E3%80%81rc.local%20%E6%88%96%20autostart%20%E5%B0%86%20gsettings%20%E8%AE%BE%E7%BD%AE%E4%B8%BA%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E8%BF%90%E8%A1%8C.png)
我正在尝试通过在启动时运行脚本来“锁定”计算机,该脚本会打开锁定,10 分钟后锁定屏幕并要求输入密码等。我正在使用 Ubuntu 12.04
我尝试编辑 crontab、anacrontab 以及 rc.local 来运行我的脚本或者将脚本中的代码实际插入到文件中,但什么都无法正常工作。
有任何想法吗?
* 这是我可以手动让命令在脚本中运行的唯一方法 *
(su - $(logname) -c "gsettings set org.gnome.desktop.screensaver lock-enabled true")
(su - $(logname) -c "gsettings set org.gnome.desktop.screensaver lock-delay 600")
(su - $(logname) -c "gsettings set org.gnome.desktop.screensaver ubuntu-lock-on-suspend true")
(su - $(logname) -c "gsettings set org.gnome.desktop.screensaver user-switch-enabled false")
* 如果手动输入终端,这些命令就会起作用 *
gsettings set org.gnome.desktop.screensaver lock-enabled true
gsettings set org.gnome.desktop.screensaver lock-delay 600
gsettings set org.gnome.desktop.screensaver ubuntu-lock-on-suspend true
gsettings set org.gnome.desktop.screensaver user-switch-enabled false
我还尝试从其他关于在 cron 中使用 gsettings 的帖子中插入以下代码,但没有成功:
DISPLAY=:0
GSETTINGS_BACKEND=dconf
sessionfile=`find "${HOME}/.dbus/session-bus/" -type f`
export `grep "DBUS_SESSION_BUS_ADDRESS" "${sessionfile}" | sed '/^#/d'`
另外,我仔细检查了我的脚本是否可执行,并创建了 /home/username/.config/autostart/screenlock.desktop:
[Desktop Entry]
Type=Application
Exec=/path/screenlock.sh
Terminal=False
Hidden=true
NoDisplay=true
X-GNOME-Autostart-enabled=true
Name[en_US]=screen lock
Name=screen lock
另外,将 /path/screenlock.sh 添加到 bash.rc 或 .profile 似乎也不起作用。
答案1
而不是使用:
DISPLAY=:0
GSETTINGS_BACKEND=dconf
sessionfile=`find "${HOME}/.dbus/session-bus/" -type f`
export `grep "DBUS_SESSION_BUS_ADDRESS" "${sessionfile}" | sed '/^#/d'`
尝试使用:
PID=$(pgrep gnome-session) # instead of 'gnome-session' it can be also used 'noutilus' or 'compiz' or the name of a process of a graphical program about that you are sure that is running after you log in the X session
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
请参阅我的回答中的解释这里。