Desbloqueie a tela na versão 14.04 sem o comando `gnome-screensaver-command`


10

Estou usando felizmente o blueproximity na 13.10, mas desde a atualização para a 14.04, ele bloqueia apenas quando meu telefone fica fora de alcance (usando gnome-screensaver-command -l), mas não é desbloqueado gnome-screensaver-command -d.

Agora, o motivo que gnome-screensaver-command -dnão funciona é por causa de um bug .

No entanto, nesse relatório de erro, é mencionado que o gnome-screensaver não é mais usado no confiável e, portanto, gnome-screensaver-commandespera-se que seja eliminado gradualmente, o que também pode estar relacionado ao motivo pelo qual o comando não funciona.

Então, minha pergunta é: se o gnome-screensaver for substituído, qual seria o novo comando para desbloquear a tela sem depender gnome-screensaver-command?


@ Braiam Esta questão é específica para 14.04 e posteriores. Por que você removeu a tag? Não há razão para evitar o uso gnome-screensaver-commandem versões anteriores!
D_inevitable

Você mesmo respondeu: 14.04 e mais tarde . 14.04 deve ser usado apenas se essa for a única versão afetada, o que não é verdade desde a versão 14.10. BTW, não pergunte sobre bugs.
Braiam

@Braiam 1. Eu não sei mais tarde! Como posso? Ainda não existe uma versão posterior. A partir de agora são apenas 14.04. E eu não perguntei sobre bugs. Então, se você não se importa, vou reverter sua edição.
D_inevitable 18/05

Seriamente? cdimage.ubuntu.com/daily-live/current experimente.
Braiam

1
@Braiam que não é um lançamento.
D_inevitable 18/05

Respostas:


6

Isso funcionou para mim:

Na linha de comando:

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

O teclado na tela aparece quando você entra pela primeira vez, mas pode fechá-lo.

Depois disso gnome-screensaver-command -dfunciona.

Retirado de benshayden em https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/1307163


Isso deve ter uma classificação muito mais alta que as outras respostas. Você não deve colocar sua senha nesses scripts, isso é muito ruim!
Patrick Cornelissen

3

Infelizmente, não há como fazer isso :(

Atualização - Encontrei uma maneira. Confira minha resposta mais recente

Esta é a minha solução anterior - não é aconselhável usar, não é desbloqueável se você perder o telefone; você precisa reiniciar para desbloqueá-lo

Acabei encontrando uma solução - não a bloqueie em primeiro lugar. Isso pode parecer estranho - aguente.

Em vez de bloqueá-lo, desativei o mouse e o teclado, ocultei todos os ícones da área de trabalho e depois mudei para a área de trabalho. Você poderia esconder mais coisas (como o lançador), mas eu tenho isso escondido de qualquer maneira.

Este comando requer um pouco de configuração.

Instale: xdotool - sudo apt-get install xdotool

Digite: xinput --liste anote os IDs do mouse e do teclado.

Eu sugeriria editar esses comandos em gedit

Este atua como o armário.

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

Isso funciona como o desbloqueio.

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

Mude o e para seus respectivos números, nos dois comandos.

Para isto:

  • Desativa / ativa o teclado
  • Desativa / ativa o mouse
  • Oculta / mostra todos os ícones da área de trabalho
  • Alterna a exibição da área de trabalho.

Uma coisa importante a ter em mente - isso não pode ser desfeito sem o seu dispositivo bluetooth. Se, por algum motivo, falhar, você precisará reiniciar. Por esse motivo, pode ser aconselhável deixar o teclado ativado e configurar o comando de desbloqueio para um atalho escolhido.


Hey boa ideia! Seria possível alterar de forma que qualquer entrada do teclado bloqueie a tela (dando a chance de desbloqueá-la sem o dispositivo bluetooth) em vez de ignorar todas as entradas do teclado?
d_inevitable 16/05

Isso é ainda melhor! Eu estava prestes a postar outra idéia, mas vou trabalhar nisso!
Tim

@d_inevitable Dê uma olhada na minha nova resposta, é mais limpa (especialmente o segundo método). Tenho certeza que funciona.
Tim

1

Então, eu percebi que o "melhor" maneira de fazer isso (apócrifo, uma vez que ainda está armazenando uma senha e fingir digitando-o em uma coisa ) seria, como eu comentei acima, criptografar a senha para a chave de entrada USB. É um script um pouco confuso, então vou explicar o que está acontecendo.

Os dispositivos para o usuário atual são enumerados através do /etc/pamusb.conf com xpath; cada um é acasalado com seu UUID usando xpath e o UUID é mapeado para um dispositivo usando blkid.

Você pode bloquear, desbloquear o dispositivo de exibição ou configurar sua chave. Quando você executa a instalação, ele cria ~ / .ssh / pamusb_rsa, se não existir. Você será solicitado a escolher um dispositivo (ou não, se houver apenas um) e digitar sua senha. Seu PW será armazenado, criptografado em {device} /. Pamusb / .auth.

Quando você executa o desbloqueio, os dispositivos são enumerados novamente e verificados um por um para um arquivo /.pamusb/.auth. Quando detectado, a descriptografia será tentada e, se for bem-sucedida, será usada para digitar sua senha no que quer que esteja aceitando texto no momento. Isso permitirá a execução quando a sessão estiver bloqueada. Por isso, espero que isso não exponha muito a você.

Chamei esse ~ / .bin / unity-lock-control (~ / .bin está no meu caminho) e tenho "unity-lock-control lock" e "unity-lock-control unlock" como meus agentes no 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

Atualizar! Existe uma maneira de usar a tela de bloqueio normal! Yay!

Não sei como é seguro (armazenar sua senha em texto sem formatação), mas acho que é o melhor possível.

Este é o comando de bloqueio: gnome-screensaver -d

Existem 2 comandos de desbloqueio:

No1:

Este é o primeiro comando de desbloqueio:

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

O clique é para ativá-lo (ele deve clicar dentro da caixa de login, devido ao movimento do mouse) e mostrar a bela nova tela de bloqueio, em vez da tela preta "adormecida".

Em seguida, digite mypassword123!com um enter, para enviá-lo, na caixa de texto.

Importante. Por alguma razão - provavelmente por causa do uso do xdotool (atalhos de teclado) - você não pode inserir letras duplas. Para contornar isso, divida-o em 2 comandos a cada letra dupla (como acima). Além disso, os números precisam ter seu próprio comando separado das letras (também acima). Por fim, modificadores (como shift) precisam de um separado, assim como a tecla Return.


No2:

Este é o segundo. É um pouco melhor e menos burro, mas requer muita configuração.

Primeiro instale o actionaz:

sudo apt-get install actionaz

Abra um novo script e arraste os itens corretos para o seu fluxo. (você pode fazer o download do preenchido aqui . Se você optar por fazer o download, abra-o, clique duas vezes em Escrever texto - Senha aqui e digite sua senha).

  1. Pausa: insira 3 segundos.
  2. Clique em: copie e cole 165:555na caixa Posição. (Dependendo do lado da tela, isso pode ser diferente. Verifique se está clicando na caixa de senha, caso contrário não funciona).
  3. Escrever texto: digite sua senha na caixa
  4. Tecla: Clique na caixa e pressione Retornar

Salve-o em sua pasta pessoal como unlock.ascr (ou qualquer outro nome - eu simplesmente não queria anunciar que tinha minha senha)

Configure seu comando de proximidade para:

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

O movimento do mouse o ativa e as opções informam para executar o script e depois sair no final.


Se você perder seu dispositivo, sempre poderá digitar sua senha, para que seja reversível.


2
Ei, isso parece muito bom, mas infelizmente armazenar a senha em texto não é uma opção. É quase tão ruim rodar tudo na raiz quanto meu usuário está na lista de sudoers. Mas acho que uma combinação de suas duas respostas funcionaria. Vou tentar algo assim que puder. Escureça basicamente a tela até que o mouse se mova, pressione uma tecla ou o dispositivo bluetooth volte ao alcance. Se o mouse se mover ou pressionar a tecla, ligue a tela novamente e execute gnome-screensaver-command -lpara que uma senha possa ser inserida enquanto o dispositivo bluetooth estiver ausente. Eu acho que deveria ser factível.
D_inevitable

Eu olhei rapidamente para a opção 'mover o mouse' ... Eu estava pensando que o xev poderia fazer isso? Você pode configurá-lo para que o mouse se mova sobre a janela do xev e, se a saída mudar, você saberá que algo está ocorrendo. aconteceu.
Tim

Concordo, o armazenamento da senha em texto sem formatação é muito ruim. Ter seu homedir criptografado - como eu acho que é o padrão agora no Ubuntu - tornaria um pouco menos ruim. Eu brinquei um pouco com isso e, na verdade, acho a solução 1 muito mais fácil, e realmente não considero isso tão hackish. Fez uma pequena mudança embora. Em vez do mousemove, eu coloquei em gnome-screensaver -dquanto que ainda acorda a tela e permite-me ter uma muito mais curto sleep(eu tenho que definir agora a 0,1, mas me pergunto se é necessária a todos)
Wouter Van Vliet

Eu estava pensando que poderia escrever um arquivo na chave com minha senha, criptografada usando minha chave de .ssh / id_rsa, e escrever um script para descriptografar e inseri-lo para login. Avisarei se tiver algum sucesso.
Fordi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.