我的Ubuntu 7.04在鎖定屏幕後,動一動鼠標就直接返回桌面,不提示輸入密碼。我登錄時用的不是root,是普通用戶。
在網上查到gnome裡鎖定屏幕用的是以下命令:
gnome-screensaver-command --lock
而gnome的屏保會調用gnome-screensaver-dialog來提示密碼,於是找到它運行了一下:
/usr/lib/gnome-screensaver/gnome-screensaver-dialog
** (gnome-screensaver-dialog:11152): WARNING **: Screen locking disabled: running under GDM
RESPONSE=OK
看樣子它認為screen locking沒有啟用,但是不知道原因,只能研究一下源碼了。在gnome-screensaver的svn浏覽了一下gnome-screensaver-dialog.c的代碼,發現下面相關的幾行:
if (getenv ("RUNNING_UNDER_GDM")) {
if (nolock_reason) {
*nolock_reason = g_strdup ("running under GDM");
}
return FALSE;
}
看來只要設定了 RUNNING_UNDER_GDM 這個環境變量就不會提示密碼,而我的環境裡的確有這個變量:
echo $RUNNING_UNDER_GDM
yes
知道原因後就簡單了。我不清楚 RUNNING_UNDER_GDM 是在什麼地方設定的,也不知道還有沒有其他東西會用到它,所以只是修改了鎖屏相關的東西。
先把原來的gnome-screensaver改個名字:
mv gnome-screensaver gnome-screensaver.orig
在/usr/bin下新建一個gnome-screensaver,輸入以下內容:
#!/bin/sh
# 先清除 RUNNING_UNDER_GDM 變量
unset RUNNING_UNDER_GDM
# 然後再運行原來的gnome-screensaver
gnome-screensaver.orig $@
保存後改成可執行:
chmod +x gnome-screensaver
殺掉gnome-screensaver進程再重新運行,或者直接重啟系統。OK,現在終於可以鎖定屏幕了!
RUNNING_UNDER_GDM這個變量好象是gnome為了解決live cd鎖屏後無法返回的問題而設的,因為live cd的用戶沒有密碼,一旦鎖屏就無法解鎖。我不知道正常安裝的系統裡面還有沒有這個變量,我這裡是用gnix_oag大俠的方法硬盤安裝的,有可能和這種安裝方式有關。