Sblocca lo schermo in 14.04 senza `gnome-screensaver-command`


10

Ho usato felicemente blueproximity in 13.10, ma da quando l'aggiornamento a 14.04 si blocca solo quando il mio telefono va fuori portata (usando gnome-screensaver-command -l), ma non si sblocca con gnome-screensaver-command -d.

Ora il motivo per cui gnome-screensaver-command -dnon funziona è a causa di un bug .

Comunque su quel bug report si dice che lo gnome-screensaver non è più usato in trust e quindi gnome-screensaver-commandsi prevede che verrà gradualmente eliminato, il che potrebbe anche essere correlato al motivo per cui il comando non funziona.

Quindi la mia domanda è, se lo gnome-screensaver viene sostituito, quale sarebbe il nuovo comando per sbloccare lo schermo senza fare affidamento gnome-screensaver-command?


@Braiam Questa domanda è specifica per 14.04 e successive. Perché hai rimosso il tag? Non vi è alcun motivo per evitare di utilizzarlo gnome-screensaver-commandnelle versioni precedenti!
d_inevitable

Risposta: 14.04 e successive . 14.04 dovrebbe essere usato solo se questa è l'unica versione interessata, il che non è vero dal 14.10. A proposito, non chiedere bug.
Braiam,

@Braiam 1. Non lo so più tardi !! Come posso? Non esiste ancora una versione successiva. A partire da ora è solo il 14.04. E non ho chiesto informazioni sui bug. Quindi, se non ti dispiace, annullerò la tua modifica.
d_inevitable


1
@Braiam che non è un rilascio.
d_inevitable

Risposte:


6

Questo ha funzionato per me:

Sulla riga di comando:

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

La tastiera su schermo viene visualizzata al primo accesso, ma è possibile chiuderla.

Dopo questo gnome-screensaver-command -dfunziona.

Tratto da benshayden su https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/1307163


Questo dovrebbe avere un punteggio molto più alto rispetto alle altre risposte. Non dovresti inserire la tua password in questi script, questo è davvero male!
Patrick Cornelissen,

3

Purtroppo non c'è modo di farlo :(

Aggiornamento: ho trovato un modo. Dai un'occhiata alla mia risposta più recente

Questa è la mia soluzione precedente: non è consigliabile utilizzarla, non è sbloccabile se si perde il telefono; devi riavviare per sbloccarlo

Alla fine ho trovato una soluzione, non bloccarla in primo luogo. Questo può sembrare strano.

Invece di bloccarlo, ho disabilitato il mouse e la tastiera, ho nascosto tutte le icone del desktop e poi sono passato al desktop. Potresti nascondere più cose (come il launcher) ma io l'ho nascosto comunque.

Questo comando richiede un po 'di configurazione.

Installa: xdotool - sudo apt-get install xdotool

Immettere: xinput --liste annotare gli ID del mouse e della tastiera.

Suggerirei di modificare questi comandi in gedit

Questo funge da armadietto.

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

Questo funge da sblocco.

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

Modificare i rispettivi numeri e in entrambi i comandi.

Per questo:

  • Disabilita / Abilita la tastiera
  • Disabilita / abilita il mouse
  • Nasconde / Mostra tutte le icone del desktop
  • Attiva / disattiva la visualizzazione del desktop.

Una cosa importante da tenere a mente: questo non può essere annullato senza il tuo dispositivo bluetooth. Se per qualche motivo non riesce, è necessario riavviare. Per questo motivo, potrebbe essere consigliabile lasciare la tastiera abilitata e impostare il comando di sblocco su una scelta rapida scelta.


Ehi bella idea! Sarebbe possibile cambiare in modo tale che qualsiasi input da tastiera blocchi invece lo schermo (dando la possibilità di sbloccarlo senza il dispositivo bluetooth) invece di ignorare tutti gli input da tastiera?
d_inevitable

È anche meglio! Stavo per pubblicare un'altra idea, ma ci lavorerò su!
Tim,

@d_inevitable Dai un'occhiata alla mia nuova risposta, è più ordinata (specialmente il secondo metodo). Sono abbastanza sicuro che funzioni.
Tim

1

Così, ho pensato che il modo "migliore" per fare questo (apocrifa, dal momento che stiamo ancora la memorizzazione di una password e fingendo digitando in una cosa ) sarebbe quello di, come ho commentato sopra, crittografare la password per la chiave di ingresso USB. È un po 'confuso un copione, quindi ti spiego cosa sta succedendo.

I dispositivi per l'utente corrente sono enumerati guardando in /etc/pamusb.conf con xpath; ognuno viene quindi accoppiato con il suo UUID usando xpath e l'UUID mappato su un dispositivo usando blkid.

Hai la possibilità di bloccare, sbloccare il dispositivo show o impostare la chiave. Quando esegui il programma di installazione, creerà ~ / .ssh / pamusb_rsa se non esiste. Ti verrà quindi chiesto di scegliere un dispositivo (o meno, se ce n'è solo uno) e di inserire la password. Il tuo PW verrà archiviato, crittografato, in {device} /. Pamusb / .auth.

Quando si esegue lo sblocco, i dispositivi vengono nuovamente enumerati e controllati uno ad uno per un file /.pamusb/.auth. Una volta individuato, verrà tentata la decrittografia e, in caso di successo, verrà utilizzata per digitare la password in qualunque cosa accetti di accettare il testo al momento. Sarà solo autorizzare il eseguito quando la sessione è bloccata, quindi speriamo, questo non sta per esporre troppo male.

Ho chiamato questo ~ / .bin / unity-lock-control (~ / .bin è sul mio percorso), e ho "unity-lock-control lock" e "unity-lock-control unlock" come i miei agenti in 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

0

Aggiornare! C'è un modo per usare la normale schermata di blocco! Sìì!

Non so quanto sia sicuro (memorizzazione della password in testo normale), ma penso che sia il migliore possibile.

Questo è il comando di blocco: gnome-screensaver -d

Ci sono 2 comandi di sblocco:

No1:

Questo è il primo comando di sblocco:

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

Il clic serve per riattivarlo (dovrebbe fare clic all'interno della casella di accesso, a causa della mossa del mouse) e mostrare la nuova schermata di blocco, anziché la schermata nera "inattivo".

Quindi digita mypassword123!con un invio, per inviarlo, nella casella di testo.

Importante. Per qualche motivo - probabilmente a causa di ciò che xdotool è effettivamente destinato a (scorciatoie da tastiera) - non puoi inserire doppie lettere. Per aggirare questo, dividerlo in 2 comandi per ogni doppia lettera (come sopra). Inoltre, i numeri devono avere il proprio comando separato dalle lettere (anche sopra). Infine, i modificatori (come shift) hanno bisogno di uno separato, così come il tasto Invio.


No2:

Questo è il secondo. È un po 'meglio e meno hacker, ma richiede molta configurazione.

Prima installazione actionaz:

sudo apt-get install actionaz

Apri un nuovo script e trascina gli elementi corretti nel tuo flusso. (puoi scaricare quello completato qui . Se hai scelto di scaricare questo, aprilo, fai doppio clic su Scrivi testo - Password qui e inserisci la tua password).

  1. Pausa: inserire 3 secondi.
  2. Fare clic: copia e incolla 165:555nella casella Posizione. (A seconda del lato dello schermo, potrebbe essere diverso. Assicurati che stia facendo clic nella casella della password, altrimenti non funziona).
  3. Scrivi testo: inserisci la password nella casella
  4. Chiave: fare clic nella casella e premere Invio

Salvalo nella tua cartella home come unlock.ascr (o qualsiasi nome - non volevo solo pubblicizzare che conteneva la mia password)

Imposta il comando di prossimità su:

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

Il movimento del mouse lo riattiva e le opzioni gli dicono di eseguire lo script e di uscire alla fine.


Se perdi il dispositivo, puoi sempre semplicemente digitare la password, quindi è reversibile.


2
Ehi, questo sembra piuttosto buono, ma purtroppo la memorizzazione di password in testo pulito non è un'opzione. Fa quasi male eseguire tutto in root come il mio utente è nella lista dei sudoers. Ma penso che una combinazione delle tue due risposte funzionerebbe. Proverò qualcosa appena possibile. Fondamentalmente oscura lo schermo fino a quando il mouse si sposta, viene premuto un tasto o il dispositivo bluetooth torna a portata. Se il mouse si sposta o si preme il tasto, riaccendere lo schermo ed eseguire in gnome-screensaver-command -lmodo che sia possibile immettere una password mentre il dispositivo Bluetooth è assente. Penso che dovrebbe essere fattibile.
d_inevitable

Ho esaminato rapidamente l'opzione "spostamento del mouse" ... Stavo pensando che xev potrebbe essere in grado di farlo? Potresti impostarlo in modo che il mouse si sposti sulla finestra di xev, e se l'output cambia, sai che qualcosa ha è accaduto.
Tim

D'accordo, archiviare la password in testo semplice è piuttosto male. Avere il tuo homedir crittografato - come penso sia il default ora in Ubuntu - lo renderebbe un po 'meno male. Ci ho giocato un po ', e in realtà trovo la soluzione n. 1 molto più semplice e non la considero davvero così hacker. Fatto un piccolo cambiamento però. Invece del mousemove, ho inserito gnome-screensaver -dla schermata che sveglia ancora lo schermo e mi consente di avere un tempo molto più breve sleep(l'ho impostato ora su 0,1, ma mi chiedo se è necessario)
Wouter Van Vliet

Stavo pensando di poter scrivere un file sulla chiave con la mia password, crittografato usando la mia chiave da .ssh / id_rsa, e scrivere uno script per decrittografarlo e inserirlo per il login. Ti farò sapere se ho successo.
Fordi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.