我一直很高兴地在 13.10 中使用 blueproximity,但自从升级到 14.04 后,只有当我的手机超出范围时它才会锁定(使用gnome-screensaver-command -l
),但不能用解锁gnome-screensaver-command -d
。
现在,这种方法gnome-screensaver-command -d
行不通,是因为漏洞。
然而在该错误报告中提到,gnome-screensaver 不再在 trusty 中使用,因此预计gnome-screensaver-command
将被逐步淘汰,这也可能与该命令不起作用的原因有关。
所以我的问题是,如果 gnome-screensaver 被替换,那么不依赖于 解锁屏幕的新命令是什么gnome-screensaver-command
?
答案1
这对我有用:
在命令行上:
gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true
首次登录时会出现屏幕键盘,但您可以关闭它。
此项gnome-screensaver-command -d
工作完成后。
摘自 benshaydenhttps://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/1307163
答案2
不幸的是,没有办法做到这一点:(
更新 - 我找到了一种方法。查看我的较新的答案
这是我以前的解决方案-不建议使用,如果手机丢失则无法解锁;必须重新启动才能解锁
我最终想出了一个解决方案——一开始就不要锁它。这听起来可能很奇怪——请忍耐一下。
我没有锁定它,而是禁用了鼠标和键盘,隐藏了所有桌面图标,然后切换到桌面。您可能可以隐藏更多内容(例如启动器),但我还是隐藏了它。
此命令需要一些设置。
安装:xdotool-sudo apt-get install xdotool
输入:xinput --list
并记下您的鼠标和键盘ID。
我建议编辑这些命令gedit
这个用作储物柜。
xinput set-prop <Keyboard ID> 'Device Enabled' 0 && xinput set-prop <Mouse ID> 'Device Enabled' 0 && gsettings set org.gnome.desktop.background show-desktop-icons false && wmctrl -k on
这起到了解锁的作用。
xinput set-prop <Keyboard ID> 'Device Enabled' 1 && xinput set-prop <Mouse ID> 'Device Enabled' 1 && gsettings set org.gnome.desktop.background show-desktop-icons true && wmctrl -k off
在两个命令中将和更改为其各自的数字。
为了这个:
- 禁用/启用键盘
- 禁用/启用鼠标
- 隐藏/显示所有桌面图标
- 切换显示您的桌面。
需要记住的一件重要事情是 - 如果没有蓝牙设备,此操作无法撤消。如果由于某种原因失败,则必须重新启动。因此,建议保持键盘启用,并将解锁命令设置为所选的快捷方式。
答案3
因此,我认为最好的办法是(这可能是伪造的,因为我们仍然存储密码,并且假装将其输入到某物中)正如我上面评论的那样,加密密码到输入 USB 密钥。这个脚本有点混乱,所以我将解释一下发生了什么。
通过使用 xpath 查看 /etc/pamusb.conf 来枚举当前用户的设备;然后使用 xpath 将每个设备与其 UUID 匹配,并使用 blkid 将 UUID 映射到设备。
您可以选择锁定、解锁显示设备或设置密钥。运行设置时,如果不存在 ~/.ssh/pamusb_rsa,它将创建它。然后系统会要求您选择一个设备(如果只有一个,则不选择),并输入您的密码。您的密码将以加密形式存储在 {device}/.pamusb/.auth 中。
当您运行 unlock 时,将再次枚举设备,并逐个检查 /.pamusb/.auth 文件。当发现一个文件时,将尝试解密,如果成功,将用于将您的密码输入到当前正在接受的文本中。它将仅有的允许在会话锁定时运行,所以希望这不会给你带来太大的暴露。
我将其命名为 ~/.bin/unity-lock-control (~/.bin 在我的路径上),并在 pam.conf 中将“unity-lock-control lock”和“unity-lock-control unlock”作为我的代理。
#!/bin/bash
PAM_KEY=${HOME}/.ssh/pamusb_rsa
devices() {
local NAMES NAME UUID DEV
NAMES=$(xmllint /etc/pamusb.conf --xpath '//user[@id="'$USER'"]/device')
NAMES=${NAMES//"<device>"/""}
NAMES=${NAMES//'</device>'/' '}
for NAME in $NAMES; do
UUID=$(xmllint /etc/pamusb.conf --xpath '//device[@id="'$NAME'"]/volume_uuid/text()')
DEV=$(blkid -U $UUID)
if [[ -n $DEV ]]; then
echo ${NAME}:${UUID}:${DEV}
fi
done
}
locked() {
LS=$(ps -A -o cmd | grep 'unity-panel-service --lockscreen-mode' | grep -v grep)
if [[ -z $LS ]]; then
return -1
else
return 0
fi
}
mounted() {
MOUNTED=$(grep $1 /proc/mounts)
if [[ -z $MOUNTED ]]; then
return -1
fi
return 0
}
mount_point() {
cat /proc/mounts | grep $1 | cut -d \ -f 2
}
case "$1" in
devices)
devices
exit 0
;;
lock)
setsid paplay /usr/share/sounds/ubuntu/stereo/service-logout.ogg &
setsid gnome-screensaver-command -l &
sleep 1
exit
;;
unlock)
if ! locked; then
echo "Screen is not locked" >&2
exit 1
fi
if [[ ! -f $PAM_KEY ]]; then
echo "${PAM_KEY} does not exist; please run $0 setup." >&2
exit 1
fi
DEVICES=$(devices)
for device in $DEVICES; do
NAME=$(echo $device | cut -d : -f 1)
UUID=$(echo $device | cut -d : -f 2)
DEV=$(echo $device | cut -d : -f 3)
mounted $DEV
MOUNTED=$?
if [[ $MOUNTED -ne 0 ]]; then
udisksctl mount -b $DEV
fi
AUTH_FILE=$(mount_point $DEV)/.pamusb/.auth
if [[ -f $AUTH_FILE ]]; then
PASS=$(openssl rsautl -decrypt -inkey $PAM_KEY -in $AUTH_FILE)
fi
if [[ $MOUNTED -ne 0 ]]; then
udisksctl unmount -b $DEV
fi
if [[ -n $PASS ]]; then
xdotool type --delay 0 "${PASS}"
xdotool key Return
sleep 1
if locked; then
setsid paplay /usr/share/sounds/ubuntu/stereo/service-login.ogg &
else
setsid paplay /usr/share/sounds/ubuntu/stereo/dialog-warning.ogg &
fi
exit 0
fi
done
echo "Did not find unlock key" >&2
exit 1
;;
setup)
echo "This will set up an OpenSSL key, and encrypt your password to be stored"
echo "on a pamusb authenticator."
echo "-----"
if [[ ! -d ${HOME}/.ecryptfs || ! -d ${HOME}/.Private ]]; then
echo "Warning: Home folder is NOT encrypted" >&2
read -p "Continue (y/N):" conf
if [[ -z $conf ]]; then exit 1; fi
if [[ $conf == "n" || $conf == "N" ]]; then exit 1; fi
fi
mkdir -p $(dirname $PAM_KEY)
if [[ ! -f $PAM_KEY ]]; then
openssl genrsa -out $PAM_KEY 1024
fi
DEVICES=$(devices)
if [[ "${#DEVICES[@]}" -eq 1 ]]; then
device="${DEVICES[0]}"
else
echo "Please select the device you would like to contain your encrypted password"
for i in "${!DEVICES[@]}"; do
echo "$i: ${DEVICES[$i]}"
done
read selection
device="${DEVICES[$selection]}"
fi
NAME=$(echo $device | cut -d : -f 1)
UUID=$(echo $device | cut -d : -f 2)
DEV=$(echo $device | cut -d : -f 3)
mounted $DEV
MOUNTED=$?
if [[ $MOUNTED -ne 0 ]]; then
echo "${NAME} is not mounted; attempting mount"
udisksctl mount -b $DEV
fi
AUTH_FILE=$(mount_point $DEV)/.pamusb/.auth
if [[ -f $AUTH_FILE ]]; then
echo "Storing encrypted password to ${DEVICES[0]}"
read -sp "Please enter your UNIX password:" PASS
echo ""
echo $PASS | openssl rsautl -encrypt -inkey $PAM_KEY -out $AUTH_FILE
fi
if [[ $MOUNTED -ne 0 ]]; then
echo "${NAME} was not mounted; unmounting"
udisksctl unmount -b $DEV
fi
exit 0
;;
*)
echo "Control for lock screen"
echo $0 '{start|stop|devices|setup}'
exit 1
;;
esac
答案4
更新!现在有办法使用普通锁屏了!太棒了!
我不知道它有多安全(以纯文本存储密码),但我认为这是最好的。
这是锁定命令:gnome-screensaver -d
有 2 个解锁命令:
第一名:
这是第一个解锁命令:
gnome-screensaver -d && xdotool type mypassword12 && xdotool key Return
单击即可唤醒它(由于鼠标移动,它应该单击登录框内),并显示漂亮的新锁屏,而不是“休眠”的黑屏。
然后在文本框中输入mypassword123!
回车键以提交。
重要。出于某种原因 - 可能是因为 xdotool 的实际用途(键盘快捷键) - 您无法输入双字母。要解决这个问题,请在每个双字母处将其拆分为 2 个命令(如上所述)。此外,数字必须有自己的、与字母分开的命令(也如上所述)。最后,修饰符(例如 shift)需要单独的命令,Return 键也是如此。
第二名:
这是第二个。它稍微好一点,不太坑爹,但需要很多设置。
首先安装actionaz:
sudo apt-get install actionaz
打开一个新脚本,并将正确的项目拖到您的流程中。(您可以下载已完成的这里。如果您选择下载此文件,请打开它,双击在此处写入文本-密码,然后输入您的密码)。
- 暂停:输入3秒。
- 单击:复制并粘贴
165:555
到位置框中。(根据屏幕侧,这可能会有所不同。确保单击的是密码框,否则不起作用)。 - 写文字:在框中输入您的密码
- 按键:单击框并按回车键
将其保存在您的主文件夹中作为 unlock.ascr(或任何名称 - 我只是不想宣传其中有我的密码)
将您的接近命令设置为:
xdotool mousemove 0 0 && actionaz unlock.ascr -ex
鼠标移动将其唤醒,选项告诉它执行脚本,然后在最后退出。
如果您丢失了设备,您可以随时输入密码,因此它是可逆的。