Odblokuj ekran w 14.04 bez polecenia „gnome-wygaszacz ekranu”

10

Z radością korzystam z blueproximity w 13.10, ale od aktualizacji do 14.04 blokuje się tylko, gdy mój telefon wychodzi poza zasięg (używa gnome-screensaver-command -l), ale nie odblokowuje się gnome-screensaver-command -d.

Teraz przyczyną tego gnome-screensaver-command -dnie jest błąd .

Jednak w tym komunikacie o błędzie wspomniano, że wygaszacz ekranu gnome nie jest już używany w zaufanym programie, dlatego gnome-screensaver-commandoczekuje się, że zostanie on wycofany, co może być również związane z tym, dlaczego polecenie nie działa.

Moje pytanie brzmi: jeśli wygaszacz ekranu gnome zostanie wymieniony, to jakie byłoby nowe polecenie odblokowania ekranu bez polegania na nim gnome-screensaver-command?

d_inevitable
źródło
@Braiam To pytanie dotyczy wersji 14.04 i nowszych. Dlaczego usunąłeś tag? Nie ma powodu, aby unikać używania gnome-screensaver-commandwe wcześniejszych wersjach!
d_inevitable
Sam odpowiedziałeś: 14.04 i później . 14.04 powinno być używane tylko wtedy, gdy jest to jedyna wersja, której dotyczy problem, co nie jest prawdą, ponieważ ma 14.10. BTW, nie pytaj o błędy.
Braiam
@Braiam 1. Nie wiem o tym później !! Jak mogę? Nie ma jeszcze żadnej późniejszej wersji. Na razie jest to tylko 14,04. I nie pytałem o błędy. Więc jeśli nie masz nic przeciwko, cofnę twoją edycję.
d_inevitable
Poważnie? cdimage.ubuntu.com/daily-live/current wypróbuj.
Braiam
1
@Braiam, który nie jest wydaniem.
d_inevitable

Odpowiedzi:

6

To działało dla mnie:

W wierszu poleceń:

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

Klawiatura ekranowa pojawia się przy pierwszym logowaniu, ale można ją zamknąć.

Po tym gnome-screensaver-command -dzadziała.

Zaczerpnięte z benshayden na https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/1307163

Toby Abel
źródło
To powinno być znacznie wyżej ocenione niż inne odpowiedzi. Nie należy umieszczać hasła w tych skryptach, to naprawdę źle!
Patrick Cornelissen
3

Niestety nie ma takiej możliwości :(

Aktualizacja - znalazłem sposób. Sprawdź moją nowszą odpowiedź

To jest moje poprzednie rozwiązanie - korzystanie z niego nie jest zalecane, nie można go odblokować, jeśli zgubisz telefon; musisz ponownie uruchomić, aby go odblokować

W końcu wymyśliłem rozwiązanie - nie zamykaj go na pierwszym miejscu. Może to zabrzmieć dziwnie.

Zamiast go zablokować, wyłączyłem mysz i klawiaturę, ukryłem wszystkie ikony pulpitu, a następnie przełączyłem się na pulpit. Możesz ukryć więcej rzeczy (np. Program uruchamiający), ale i tak je ukryłem.

To polecenie wymaga trochę konfiguracji.

Zainstaluj: xdotool - sudo apt-get install xdotool

Wpisz: xinput --listi zanotuj identyfikatory myszy i klawiatury.

Sugerowałbym edycję tych poleceń w gedit

Ten działa jak szafka.

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

Działa to jak odblokowanie.

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

Zmień i na odpowiadające im liczby, w obu poleceniach.

Aby to zrobić:

  • Wyłącza / włącza klawiaturę
  • Wyłącza / włącza mysz
  • Ukrywa / pokazuje wszystkie ikony pulpitu
  • Przełącza wyświetlanie twojego pulpitu.

Należy pamiętać o jednej ważnej rzeczy - nie można tego cofnąć bez urządzenia Bluetooth. Jeśli z jakiegoś powodu nie powiedzie się, musisz uruchomić ponownie. Z tego powodu może być wskazane pozostawienie włączonej klawiatury i skonfigurowanie polecenia odblokowania dla wybranego skrótu.

Tim
źródło
Hej fajny pomysł! Czy można to zmienić w taki sposób, aby jakiekolwiek wprowadzanie z klawiatury blokowało ekran (co daje szansę odblokowania go bez urządzenia Bluetooth) zamiast ignorować wszystkie wprowadzane dane z klawiatury?
d_inevitable
To nawet lepiej! Właśnie miałem opublikować inny pomysł, ale zacznę nad tym pracować!
Tim
@d_inevitable Spójrz na moją nową odpowiedź, jest ładniejsza (szczególnie 2. metoda). Jestem prawie pewien, że to działa.
Tim
1

Uznałem więc, że „najlepszym” sposobem na zrobienie tego (apokryficzny, ponieważ wciąż przechowujemy hasło i fałszowanie wpisując je w coś ) byłoby, jak skomentowałem powyżej, szyfrowanie hasła do wejściowego klucza USB. To trochę bałagan w skrypcie, więc wyjaśnię, co się dzieje.

Urządzenia dla bieżącego użytkownika są wyliczane, przeglądając plik /etc/pamusb.conf za pomocą xpath; każdy z nich jest następnie łączony z UUID za pomocą xpath, a UUID mapowany na urządzenie za pomocą blkid.

Możesz zablokować, odblokować urządzenie pokazowe lub skonfigurować klucz. Po uruchomieniu Instalatora utworzy ~ / .ssh / pamusb_rsa, jeśli nie istnieje. Następnie zostaniesz poproszony o wybranie urządzenia (lub nie, jeśli jest tylko jedno) i podanie hasła. Twoje PW będą przechowywane, szyfrowane, w {device} /. Pamusb / .auth.

Po uruchomieniu odblokowania urządzenia są ponownie wyliczane i sprawdzane jeden po drugim w poszukiwaniu pliku /.pamusb/.auth. Gdy ktoś zostanie zauważony, nastąpi próba odszyfrowania, a jeśli się powiedzie, zostanie użyte do wpisania hasła w dowolnym momencie, w którym akceptuje się tekst. Pozwoli to na uruchomienie tylko wtedy, gdy sesja jest zablokowana, więc mam nadzieję, że nie będzie to narażać cię tak bardzo.

Nazwałem to ~ / .bin / unity-lock-control (~ / .bin jest na mojej ścieżce) i mam „unity-lock-control lock” i „unity-lock-control unlock” jako moi agenci w 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
źródło
0

Aktualizacja! Jest sposób na użycie normalnego ekranu blokady! Tak!

Nie wiem, jak bezpieczne (przechowywanie hasła w postaci zwykłego tekstu), ale myślę, że jest to najlepsze z możliwych.

Oto polecenie blokady: gnome-screensaver -d

Istnieją 2 polecenia odblokowania:

Nr 1:

To jest pierwsze polecenie odblokowania:

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

Kliknij, aby go obudzić (powinien kliknąć wewnątrz pola logowania z powodu ruchu myszy) i pokazać ładny nowy ekran blokady, zamiast „śpiącego” czarnego ekranu.

Następnie wpisuje mypassword123!w polu tekstowym Enter, aby je przesłać.

Ważny. Z jakiegoś powodu - prawdopodobnie ze względu na to, do czego xdotool jest przeznaczony (skróty klawiaturowe) - nie można wprowadzać podwójnych liter. Aby obejść ten problem, podziel go na 2 polecenia przy każdej podwójnej literze (jak wyżej). Ponadto liczby muszą mieć własne, oddzielne polecenia od liter (również powyżej). Na koniec modyfikatory (takie jak shift) wymagają osobnego, podobnie jak klawisz Return.


Nr 2:

To jest drugi. Jest nieco lepszy i mniej hackerski, ale wymaga dużo konfiguracji.

Pierwsza instalacja Actionaz:

sudo apt-get install actionaz

Otwórz nowy skrypt i przeciągnij odpowiednie elementy do swojego przepływu. (możesz pobrać ukończony tutaj . Jeśli zdecydujesz się go pobrać, otwórz go, kliknij dwukrotnie Wpisz tekst - Hasło tutaj i wprowadź swoje hasło).

  1. Pauza: wprowadź 3 sekundy.
  2. Kliknij: skopiuj i wklej 165:555w polu Pozycja. (W zależności od strony ekranu może być inaczej. Upewnij się, że kliknął w polu hasła, w przeciwnym razie nie działa).
  3. Wpisz tekst: wpisz hasło w polu
  4. Klucz: kliknij pole i naciśnij klawisz Return

Zapisz go w swoim katalogu domowym jako unlock.ascr (lub jakikolwiek inny - po prostu nie chciałem reklamować się, że ma w nim moje hasło)

Skonfiguruj polecenie bliskości, aby:

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

Ruch myszy budzi go, a opcje nakazują mu wykonanie skryptu, a następnie zakończenie na końcu.


Jeśli zgubisz urządzenie, zawsze możesz po prostu wpisać hasło, aby było ono odwracalne.

Tim
źródło
2
Hej, to wygląda całkiem dobrze, ale niestety przechowywanie hasła w czystym tekście nie jest opcją. Prawie tak źle działa uruchamianie wszystkiego w katalogu głównym, jak mój użytkownik jest na liście sudoers. Ale myślę, że kombinacja dwóch odpowiedzi byłaby skuteczna. Spróbuję jak najszybciej. Zasadniczo przyciemnij ekran, dopóki mysz nie poruszy się, nie zostanie naciśnięty żaden klawisz ani nie wróci urządzenie Bluetooth. Jeśli mysz się poruszy lub zostanie naciśnięty klawisz, włącz ponownie ekran i uruchom go, gnome-screensaver-command -laby hasło można było wprowadzić, gdy urządzenie Bluetooth jest nieobecne. Myślę, że powinno to być wykonalne.
d_inevitable
Szybko spojrzałem na opcję „ruch myszy” ... Myślałem, że Xev może to zrobić? Możesz ustawić, że mysz przesuwa się nad oknem xev, a jeśli wynik się zmienia, wiesz, że coś ma stało się.
Tim
Zgadzam się, przechowywanie hasła w postaci zwykłego tekstu jest dość złe. Zaszyfrowanie twojego homediru - jak myślę jest teraz domyślnym w Ubuntu - sprawiłoby, że byłoby trochę mniej źle. Grałem trochę z tym i faktycznie znalazłem rozwiązanie nr 1 o wiele łatwiejsze i tak naprawdę nie uważam tego za zbyt hackerskie. Dokonałem niewielkiej zmiany. Zamiast ruchu myszy włączam, gnome-screensaver -dponieważ wciąż budzi się ekran i pozwala mi być znacznie krótszy sleep(ustawiłem go teraz na 0,1, ale zastanawiam się, czy w ogóle jest potrzebny)
Wouter Van Vliet
Myślałem, że mogę zapisać plik na kluczu za pomocą hasła, zaszyfrowanego za pomocą mojego klucza z .ssh / id_rsa, i napisać skrypt do odszyfrowania i wprowadzenia go do logowania. Dam ci znać, jeśli odniesie sukces.
Fordi