web-dev-qa-db-fra.com

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

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

Maintenant, la raison pour laquelle gnome-screensaver-command -d ne fonctionne pas est due à un bug .

Cependant, dans ce rapport de bogue, il est mentionné que le gnome-screensaver n'est plus utilisé dans trusty et que le gnome-screensaver-command devrait donc être supprimé, ce qui pourrait également expliquer la raison pour laquelle la commande ne fonctionne pas.

Ma question est donc la suivante: si l’économiseur d’écran gnome est remplacé, quelle sera la nouvelle commande permettant de déverrouiller l’écran sans s’appuyer sur gnome-screensaver-command?

10
d_inevitable

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 lorsque vous vous connectez pour la première fois, mais vous pouvez le fermer.

Après cela gnome-screensaver-command -d fonctionne.

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

6
Toby Abel

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

Mise à jour - J'ai trouvé un moyen. Regarde mes nouvelle réponse

Ceci est ma solution précédente - Il est déconseillé de l'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 - ours avec.

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 pouvez éventuellement cacher plus de choses (comme le lanceur) mais je l'ai caché quand même.

Cette commande nécessite un peu de configuration.

Installer: xdotool - Sudo apt-get install xdotool

Entrez: xinput --list et notez vos identifiants de souris et de 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 agit comme le 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

Changez les et en leurs numéros respectifs, dans les deux commandes.

Pour cela:

  • Désactive/active le clavier
  • Désactive/active la souris
  • Masque/affiche toutes les icônes de votre 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.

3
Tim

Donc, je me suis dit que le "meilleur" moyen de faire cela (apocryphe, étant donné que nous stockons toujours un mot de passe et simulant de le taper dans une chose) serait, comme je l'ai dit plus haut, de chiffrer le mot de passe to la clé USB d'entrée. C'est un peu le désordre d'un script, alors je vais vous expliquer ce qui se passe.

Les périphériques de l'utilisateur actuel sont énumérés en consultant le fichier /etc/pamusb.conf avec xpath; chacun d'eux 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, de déverrouiller ou de configurer votre clé. Lorsque vous exécutez le programme d’installation, il créera ~/.ssh/pamusb_rsa s’il n’existe pas. Il vous sera ensuite demandé de choisir un périphérique (ou non, s'il n'y en a qu'un) et de saisir votre mot de passe. Votre PW sera stocké et crypté dans {device} /. Pamusb/.auth.

Lorsque vous exécutez unlock, 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écryptage sera tenté et, en cas de succès, il sera utilisé pour taper votre mot de passe dans le texte acceptant le texte en ce moment. Cela va seulement permettre l'exécution lorsque la session est verrouillée, donc j'espère que cela ne vous exposera pas trop mal.

J'ai nommé ceci ~/.bin/Unity-lock-control (~/.bin est sur mon chemin), et j'ai "Unity-lock-control lock" et "Unity-lock-control unlock" comme mes 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
1
Fordi

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

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

Voici la commande de verrouillage: gnome-screensaver -d

Il y a 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 déclic est de le réveiller (il faut cliquer à l'intérieur de la zone de connexion, à cause du déplacement de la souris) et afficher le nouvel écran de verrouillage Nice, au lieu de l'écran noir "en sommeil".

Ensuite, il saisit mypassword123! avec une entrée pour l'envoyer dans la zone de texte.

Important. Pour une raison quelconque - probablement à cause de l'utilisation de xdotool (raccourcis clavier) - vous ne pouvez pas entrer de lettres doubles. Pour résoudre ce problème, divisez-le en 2 commandes à chaque lettre double (comme ci-dessus). De plus, les nombres doivent avoir leur propre commande, distincte des lettres (également ci-dessus). Enfin, les modificateurs (tels que shift) nécessitent un filtre séparé, 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.

Première installation 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 qui est complété ici . Si vous avez choisi de le télécharger, ouvrez-le, double-cliquez sur Écrire le texte - Mot de passe ici, puis entrez votre mot de passe).

  1. Pause: entrez 3 secondes.
  2. Cliquez sur: copiez et collez 165:555 dans la zone Position. (En fonction du côté de l'écran, cela peut être différent. Assurez-vous que vous cliquez dans la zone de mot de passe, sinon cela ne fonctionnera 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 unlock.ascr (ou n’importe quel nom - je ne voulais tout simplement pas annoncer qu’il contenait mon mot de passe)

Configurez votre commande de proximité comme suit:

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

Le mouvement 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 pour qu'il soit réversible.

0
Tim