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


10

我一直很高兴在13.10中使用blueproximity,但是自从升级到14.04以来,它仅在手机超出范围(使用gnome-screensaver-command -l)时才锁定,但不能通过解锁gnome-screensaver-command -d

现在gnome-screensaver-command -d不起作用的原因是因为有错误

但是,在该错误报告中,提到了gnome-screensaver不再用于信任状态,因此gnome-screensaver-command有望逐步淘汰gnome-screensaver ,这也可能与该命令不起作用的原因有关。

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


@Braiam此问题特定于14.04和更高版本。为什么删除标签?没有理由要避免gnome-screensaver-command在早期版本中使用!
d_inevitable 2014年

您自己回答:14.04 及更高版本。仅当受影响的唯一版本是14.04时才应使用,这是不正确的,因为14.10拥有该版本。顺便说一句,不要问错误。
Braiam

@布赖恩1.我以后不知道!!我怎样才能?尚无更高版本。截至目前,它只有14.04。而且我没有询问错误。因此,如果您不介意,我将还原您的修改。
d_inevitable 2014年

认真吗 cdimage.ubuntu.com/daily-live/current尝试一下。
Braiam

1
@Braiam不是发行版。
d_inevitable 2014年

Answers:


6

这为我工作:

在命令行上:

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

首次登录时将显示屏幕键盘,但您可以将其关闭。

经过这个gnome-screensaver-command -d工程。

取自Benshayden,网址为https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/1307163


这个等级应该比其他答案高得多。您不应该在这些脚本中输入密码,这真的很糟糕!
Patrick Cornelissen 2015年

3

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

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

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

我最终想出了一个解决方案-首先不要将其锁定。这听起来可能很奇怪-请忍受。

我没有锁定它,而是禁用了鼠标和键盘,隐藏了所有桌面图标,然后切换到了桌面。您可能可以隐藏更多的东西(例如启动器),但无论如何我还是将其隐藏了。

此命令需要一些设置。

安装: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

在两个命令中,将和更改为各自的编号。

为了这个:

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

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


嘿,好主意!是否有可能进行更改,以使任何键盘输入都将锁定屏幕(而不使用蓝牙设备来解锁屏幕)而不是忽略所有键盘输入?
d_inevitable 2014年

那就更好了!我本来打算发表另一个想法,但我会继续努力!
蒂姆(Tim)

@d_inevitable看看我的新答案,它更整洁了(尤其是第二种方法)。我很确定它能起作用。
蒂姆(Tim)

1

所以,我想通了“最好”的方式做到这一点(杜撰的,因为我们仍然存储密码,并伪造其输入为物)。将,就像我上面的评论,对密码进行加密,以进入USB密钥。脚本有点混乱,所以我将解释发生了什么。

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

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

运行解锁时,将再次枚举设备,并逐一检查/.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

0

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

我不知道它的安全性(以明文形式存储您的密码),但是我认为这是最好的选择。

这是lock命令: gnome-screensaver -d

有2个解锁命令:

1号

这是第一个解锁命令:

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

单击就是唤醒它(由于鼠标移动,它应该在登录框内单击),并显示漂亮的新锁定屏幕,而不是“休眠”黑屏。

然后mypassword123!,在文本框中输入要提交的输入内容。

重要。由于某些原因-可能是由于xdotool实际上是要用作(键盘快捷键)的原因-您不能输入双字母。要解决此问题,请在每个双字母处将其分成2个命令(如上所述)。同样,数字必须有自己的字母和字母分开的命令(同样在上面)。最后,修饰符(例如shift)需要一个单独的修饰符,Return键也需要。


2号

这是第二个。这是一个更好的方法,并且没有太多的编程技巧,但是需要进行大量设置。

首先安装actionaz:

sudo apt-get install actionaz

打开一个新脚本,然后将正确的项目拖到流程中。(您可以在此处下载完整的密码。如果选择下载此密码,请打开它,双击“在此处写入文本-密码”,然后输入密码)。

  1. 暂停:输入3秒钟。
  2. 单击:复制并粘贴165:555到“位置”框中。(这取决于屏幕端,这可能有所不同。请确保单击了“密码”框,否则将无法使用)。
  3. 输入文字:在框中输入密码
  4. 键:在框中单击,然后按Return键

将其保存为您的主文件夹中的unlock.ascr(或任何名称-我只是不想广告它上有密码)

将您的接近命令设置为:

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

鼠标移动将其唤醒,选项告诉它执行脚本,然后最后退出。


如果您丢失了设备,则始终可以只输入密码,因此密码是可逆的。


2
嘿,这看起来还不错,但是不幸的是,不能将密码存储在纯文本中。以root身份运行所有内容几乎和我的用户在sudoers列表中一样糟糕。但是我认为将您的两个答案结合起来是可行的。我会尽快尝试的。基本上使屏幕变暗,直到鼠标移动,按下键或蓝牙设备返回范围。如果鼠标移动或按下了键,请重新打开屏幕并运行,gnome-screensaver-command -l以便可以在没有蓝牙设备的情况下输入密码。我认为应该可行。
d_inevitable 2014年

我确实很快地看了看一下“鼠标移动”选项...我在想xev能够做到这一点?发生了
蒂姆(Tim)

同意,以纯文本格式存储密码非常糟糕。将您的homedir加密-我认为这是Ubuntu中的默认设置-这样做的安全性会有所降低。我已经对其进行了一些尝试,实际上找到了解决方案1容易得多,并且并没有真正考虑到所有问题。不过做了一点零钱。我gnome-screensaver -d没有进行鼠标移动,而是放了进去,因为它仍然可以唤醒屏幕并使我的屏幕更短sleep(我现在将其设置为0.1,但想知道是否完全需要它)
Wouter Van Vliet

我当时想我可以用密码在密钥上写一个文件,然后使用.ssh / id_rsa中的密钥对它加密,然后编写一个脚本解密并输入该密码以进行登录。如果我有任何成功,我会通知您。
Fordi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.