在没有`gnome-screensaver-command`的情况下解锁14.04中的屏幕

我一直很乐意在13.10中使用blueproximity,但是自从升级到14.04后它只在我的手机超出范围时锁定(使用gnome-screensaver-command -l ),但它没有用gnome-screensaver-command -d解锁。

现在gnome-screensaver-command -d不起作用的原因是因为一个bug 。

然而,在该bug报告中提到gnome-screensaver不再在可信任中使用,因此gnome-screensaver-command预计将被逐步淘汰,这也可能与命令无效的原因有关。

所以我的问题是,如果更换了gnome-screensaver,那么在不依赖gnome-screensaver-command情况下解锁屏幕的新命令是什么?

这对我有用:

在命令行上:

gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true

首次登录时会出现屏幕键盘,但您可以将其关闭。

在这个gnome-screensaver-command -d工作之后。

取自benshayden, url为https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/1307163

不幸的是,没有办法做到这一点:(

更新 – 我找到了一种方法。 看看我的新答案

这是我以前的解决方案 – 不建议使用,如果丢失手机,它无法解锁; 你必须重新启动才能解锁它

我最终想出了一个解决方案 – 首先不要锁定它。 这可能听起来很奇怪 – 熊。

我没有锁定它,而是禁用鼠标和键盘,隐藏所有桌面图标,然后切换到桌面。 你可能会隐藏更多的东西(比如发射器),但无论如何我都隐藏了它。

此命令需要一些设置。

安装:xdotool – sudo apt-get install xdotool

输入: xinput --list并记下鼠标和键盘ID。

我建议在gedit编辑这些命令

这个作为储物柜。

xinput set-prop 'Device Enabled' 0 && xinput set-prop 'Device Enabled' 0 && gsettings set org.gnome.desktop.background show-desktop-icons false && wmctrl -k on

这充当解锁。

xinput set-prop 'Device Enabled' 1 && xinput set-prop 'Device Enabled' 1 && gsettings set org.gnome.desktop.background show-desktop-icons true && wmctrl -k off

在两个命令中更改和各自的数字。

为了这个:

  • 禁用/启用键盘
  • 禁用/启用鼠标
  • 隐藏/显示所有桌面图标
  • 切换显示您的桌面。

需要记住的一件重要事情 – 如果没有蓝牙设备,这一点无法撤消。 如果由于某种原因它失败了,你必须重新启动。 因此,建议保持键盘启用,并将解锁命令设置为选定的快捷方式。

所以,我认为做到这一点的“最佳”方式(伪造,因为我们仍然存储密码并将其伪装成一个东西 )就像我上面评论的那样,将密码加密条目USB密钥。 脚本有点乱,所以我会解释发生了什么。

通过使用xpath查看/etc/pamusb.conf来枚举当前用户的设备; 然后使用xpath将每个UUID与其UUID配对,并使用blkid将UUID映射到设备。

您可以选择锁定,解锁显示设备或设置密钥。 运行安装程序时,如果它不存在,它将创建〜/ .ssh / pamusb_rsa。 然后,您将被要求选择一个设备(如果只有一个设备,则不会),并输入您的密码。 您的PW将以{device} /.pamusb / .auth存储,加密。

当您运行unlock时,将再次枚举设备,并逐个检查/.pamusb/.auth文件。 当一个人被发现时,将尝试解密,如果成功,将用于输入您当前接受文本的密码。 它只会在会话被锁定时允许运行,所以希望这不会让你太糟糕。

我将此命名为〜/ .bin / unity-lock-control(〜/ .bin在我的路径上),并将“unity-lock-control lock”和“unity-lock-control unlock”作为我在pam.conf中的代理。

 #!/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//""/""} NAMES=${NAMES//''/' '} 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 

更新! 有一种方法可以使用普通锁屏! 好极了!

我不知道它有多安全(以明文forms存储你的密码),但我认为这是最好的。

这是锁定命令: gnome-screensaver -d

有2个解锁命令:

NO1:

这是第一个解锁命令:

gnome-screensaver -d && xdotool type mypassword12 && xdotool key Return

点击是唤醒它(它应该在登录框内点击,因为鼠标移动),并显示漂亮的新锁屏,而不是“睡眠”黑屏。

然后它输入mypassword123! 输入,将其提交到文本框中。

重要。 出于某种原因 – 可能是因为xdotool实际上意味着用于(键盘快捷键) – 你不能输入双字母。 要解决这个问题,请在每个双字母处将其拆分为2个命令(如上所述)。 此外,数字必须有自己的单独命令(也在上面)。 最后,修改器(例如shift)需要一个单独的修改器,如Return键。


NO2:

这是第二个。 它有点好,不那么hackish,但需要很多设置。

首先安装actionaz:

sudo apt-get install actionaz

打开一个新脚本,然后将正确的项拖到您的流中。 (你可以在这里下载完成的。如果你选择下载它,打开它,双击写文本 – 密码在这里,然后输入你的密码)。

  1. 暂停:输入3秒。
  2. 单击:将165:555复制并粘贴到“位置”框中。 (根据屏幕方面的不同,这可能会有所不同。请确保它在密码框中单击,否则它不起作用)。
  3. 写文字:在框中输入您的密码
  4. 键:单击该框并按Return键

将它保存在您的主文件夹中,作为unlock.ascr(或任何名称 – 我只是不想宣传它有我的密码)

将接近命令设置为:

xdotool mousemove 0 0 && actionaz unlock.ascr -ex

鼠标移动唤醒它,选项告诉它执行脚本然后在结束时退出。


如果您丢失了设备,则可以随时输入密码,因此它是可逆的。