Déverrouiller l'écran en 14.04 sans `gnome-screensaver-command`

10

J'ai utilisé avec bonheur blueproximity en 13.10, mais depuis la mise à niveau vers 14.04, il ne se verrouille que lorsque mon téléphone est hors de portée (en utilisant gnome-screensaver-command -l), mais il ne se déverrouille pas avec gnome-screensaver-command -d.

Maintenant, la raison pour laquelle cela gnome-screensaver-command -dne fonctionne pas est à cause d'un bug .

Cependant, sur ce rapport de bogue, il est mentionné que l'économiseur d'écran gnome n'est plus utilisé dans trusty et par conséquent, il gnome-screensaver-commanddevrait être supprimé, ce qui pourrait également être lié à la raison pour laquelle la commande ne fonctionne pas.

Donc, ma question est, si le gnome-screensaver est remplacé, alors quelle serait la nouvelle commande pour déverrouiller l'écran sans compter gnome-screensaver-command?

d_inevitable
la source
@Braiam Cette question est spécifique à 14.04 et versions ultérieures. Pourquoi avez-vous supprimé le tag? Il n'y a aucune raison pour éviter d'utiliser gnome-screensaver-commanddans les versions antérieures!
d_inevitable
Vous avez répondu: 14.04 et plus tard . 14.04 ne doit être utilisé que si c'est la seule version affectée, ce qui n'est pas vrai car 14.10 l'a. BTW, ne posez pas de questions sur les bugs.
Braiam
@Braiam 1. Je ne sais pas plus tard !! Comment puis-je? Il n'y a pas encore de version ultérieure. Pour l'instant, il est seulement 14.04. Et je n'ai pas posé de questions sur les bugs. Donc, si cela ne vous dérange pas, je reviendrai sur votre montage.
d_inevitable
Sérieusement? cdimage.ubuntu.com/daily-live/current essayez-le.
Braiam
1
@Braiam ce n'est pas une version.
d_inevitable

Réponses:

6

Cela a fonctionné pour moi:

Sur la ligne de commande:

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

Le clavier à l'écran apparaît lors de votre première connexion, mais vous pouvez le fermer.

Après cela gnome-screensaver-command -dfonctionne.

Tiré de benshayden sur https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/1307163

Toby Abel
la source
Cela devrait être bien mieux noté que les autres réponses. Vous ne devez pas mettre votre mot de passe dans ces scripts, c'est vraiment mauvais!
Patrick Cornelissen
3

Il n'y a malheureusement aucun moyen de le faire :(

Mise à jour - j'ai trouvé un moyen. Découvrez ma nouvelle réponse

Ceci est ma solution précédente - Il est déconseillé d'utiliser, il n'est pas déverrouillable si vous perdez votre téléphone; vous devez redémarrer pour le déverrouiller

J'ai finalement trouvé une solution - ne la verrouillez pas en premier lieu. Cela peut sembler étrange.

Au lieu de le verrouiller, j'ai désactivé la souris et le clavier, masqué toutes les icônes du bureau, puis basculé sur le bureau. Vous pourriez peut-être cacher plus de choses (comme le lanceur) mais je l'ai quand même caché.

Cette commande nécessite un peu de configuration.

Installer: xdotool - sudo apt-get install xdotool

Entrez: xinput --listet notez les identifiants de votre souris et de votre clavier.

Je suggère de modifier ces commandes dans gedit

Celui-ci fait office de casier.

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

Cela sert de déverrouillage.

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

Modifiez le et à leurs numéros respectifs, dans les deux commandes.

Pour cela:

  • Désactive / active le clavier
  • Désactive / active la souris
  • Masque / affiche toutes vos icônes de bureau
  • Bascule l'affichage de votre bureau.

Une chose importante à garder à l'esprit - cela ne peut pas être annulé sans votre appareil Bluetooth. Si pour une raison quelconque, il échoue, vous devez redémarrer. Pour cette raison, il peut être conseillé de laisser le clavier activé et de configurer la commande de déverrouillage sur le raccourci choisi.

Tim
la source
Hé belle idée! Serait-il possible de changer de telle sorte que n'importe quelle entrée clavier verrouille l'écran à la place (donnant une chance de le déverrouiller sans le périphérique Bluetooth) au lieu d'ignorer toutes les entrées clavier?
d_inevitable
C'est même mieux! J'étais sur le point de publier une autre idée, mais je vais y travailler!
Tim
@d_inevitable Jetez un œil à ma nouvelle réponse, elle est plus soignée (surtout la 2ème méthode). Je suis presque sûr que ça marche.
Tim
1

Donc, j'ai pensé que la "meilleure" façon de faire cela (apocryphe, puisque nous stockons toujours un mot de passe et truquons en le tapant dans une chose ) serait, comme je l'ai commenté ci-dessus, de crypter le mot de passe sur la clé USB d'entrée. C'est un peu désordonné d'un script, alors je vais vous expliquer ce qui se passe.

Les périphériques pour l'utilisateur actuel sont énumérés en consultant /etc/pamusb.conf avec xpath; chacun est ensuite associé à son UUID à l'aide de xpath, et l'UUID est mappé à un périphérique à l'aide de blkid.

Vous avez le choix de verrouiller, déverrouiller l'appareil de spectacle ou de configurer votre clé. Lorsque vous exécutez le programme d'installation, il crée ~ / .ssh / pamusb_rsa s'il n'existe pas. Il vous sera alors demandé de choisir un appareil (ou pas, s'il n'y en a qu'un), et d'entrer votre mot de passe. Votre PW sera stocké, crypté, dans {device} /. Pamusb / .auth.

Lorsque vous exécutez le déverrouillage, les périphériques sont à nouveau énumérés et vérifiés un par un pour un fichier /.pamusb/.auth. Une fois repéré, le déchiffrement sera tenté et, en cas de succès, sera utilisé pour taper votre mot de passe dans tout ce qui accepte le texte en ce moment. Il ne permettra l'exécution que lorsque la session est verrouillée, donc j'espère que cela ne vous exposera pas trop mal.

J'ai nommé ce ~ / .bin / unit-lock-control (~ / .bin est sur mon chemin), et j'ai "union-lock-control lock" et "unity-lock-control unlock" comme agents dans 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//"<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
Fordi
la source
0

Mettre à jour! Il existe un moyen d'utiliser l'écran de verrouillage normal! Yay!

Je ne sais pas à quel point il est sécurisé (stockage de votre mot de passe en clair), mais je pense que c'est le meilleur possible.

Voici la commande de verrouillage: gnome-screensaver -d

Il existe 2 commandes de déverrouillage:

No1:

C'est la 1ère commande de déverrouillage:

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

Le clic consiste à le réveiller (il doit cliquer à l'intérieur de la boîte de connexion, à cause du déplacement de la souris), et afficher le nouvel écran de verrouillage agréable, au lieu de l'écran noir "en veille".

Ensuite, il tape mypassword123!avec une entrée, pour le soumettre, dans la zone de texte.

Important. Pour une raison quelconque - probablement à cause de ce que xdotool est réellement destiné à être utilisé (raccourcis clavier) - vous ne pouvez pas entrer de lettres doubles. Pour contourner cela, divisez-le en 2 commandes à chaque double lettre (comme ci-dessus). De plus, les chiffres doivent avoir leur propre commande distincte des lettres (également ci-dessus). Enfin, les modificateurs (tels que shift) ont besoin d'un autre, tout comme la touche Retour.


No2:

Ceci est le deuxième. C'est un peu mieux et moins hackish, mais nécessite beaucoup de mise en place.

Installez d'abord actionaz:

sudo apt-get install actionaz

Ouvrez un nouveau script et faites glisser les éléments appropriés dans votre flux. (vous pouvez télécharger celui-ci ici . Si vous avez choisi de le télécharger, ouvrez-le, double-cliquez sur Écrire le texte - Mot de passe ici et entrez votre mot de passe).

  1. Pause: entrez 3 secondes.
  2. Cliquez: copiez et collez 165:555dans la zone Position. (Selon le côté de l'écran, cela peut être différent. Assurez-vous qu'il clique dans la zone de mot de passe, sinon cela ne fonctionne pas).
  3. Écrire du texte: entrez votre mot de passe dans la case
  4. Clé: Cliquez dans la case et appuyez sur Retour

Enregistrez-le dans votre dossier personnel sous le nom unlock.ascr (ou n'importe quel nom - je ne voulais tout simplement pas annoncer qu'il y avait mon mot de passe)

Configurez votre commande de proximité pour qu'elle soit:

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

Le déplacement de la souris le réveille et les options lui indiquent d'exécuter le script, puis de quitter à la fin.


Si vous perdez votre appareil, vous pouvez toujours taper votre mot de passe, il est donc réversible.

Tim
la source
2
Hé, cela a l'air plutôt bien, mais malheureusement, le stockage du mot de passe en texte clair n'est pas une option. C'est presque aussi mauvais de tout exécuter en root que mon utilisateur est sur la liste des sudoers. Mais je pense qu'une combinaison de vos deux réponses fonctionnerait. Je vais essayer quelque chose dès que possible. Fondez l'écran jusqu'à ce que la souris bouge, qu'une touche soit enfoncée ou que le périphérique Bluetooth revienne à portée. Si la souris bouge ou si vous appuyez sur une touche, rallumez l'écran et exécutez-le gnome-screensaver-command -lafin qu'un mot de passe puisse être saisi pendant que le périphérique Bluetooth est absent. Je pense que cela devrait être faisable.
d_inevitable
J'ai regardé rapidement l'option «déplacement de la souris» ... Je pensais que xev pourrait être en mesure de le faire? Vous pouvez configurer que la souris se déplace sur la fenêtre xev, et si la sortie change, vous savez que quelque chose a arrivé.
Tim
D'accord, le stockage du mot de passe en texte brut est assez mauvais. Avoir votre homedir crypté - comme je pense que c'est la valeur par défaut maintenant dans Ubuntu - le rendrait un peu moins mauvais cependant. J'ai joué un peu avec, et en fait, je trouve la solution n ° 1 beaucoup plus facile, et je ne considère pas vraiment cela comme un hack. Mais j'ai fait un petit changement. Au lieu du déplacement de la souris, je l'ai mis gnome-screensaver -dcar cela réveille toujours l'écran et me permet d'avoir un temps beaucoup plus court sleep(je l'ai réglé maintenant à 0,1, mais je me demande si c'est nécessaire)
Wouter Van Vliet
Je pensais que je pouvais écrire un fichier sur la clé avec mon mot de passe, chiffré à l'aide de ma clé de .ssh / id_rsa, et écrire un script pour déchiffrer et l'entrer pour la connexion. Je vous ferai savoir si j'ai du succès.
Fordi