Buka kunci layar di 14.04 tanpa `gnome-screensaver-command`


10

Saya sudah senang menggunakan blueproximity di 13.10, tetapi sejak upgrade ke 14.04 hanya terkunci ketika ponsel saya keluar dari jangkauan (menggunakan gnome-screensaver-command -l), tetapi tidak terbuka dengan gnome-screensaver-command -d.

Sekarang alasan yang gnome-screensaver-command -dtidak berhasil adalah karena bug .

Namun pada laporan bug itu disebutkan bahwa gnome-screensaver tidak lagi digunakan dalam kepercayaan dan oleh karena gnome-screensaver-commanditu diharapkan akan dihapus, yang juga dapat dikaitkan dengan mengapa perintah tidak berfungsi.

Jadi pertanyaan saya adalah, jika gnome-screensaver diganti, lalu apa perintah baru untuk membuka kunci layar tanpa mengandalkan gnome-screensaver-command?


@Braiam Pertanyaan ini khusus untuk 14,04 dan lebih baru. Mengapa Anda menghapus tag? Tidak ada alasan mengapa untuk menghindari penggunaan gnome-screensaver-commanddi versi sebelumnya!
d_inevitable

Yourself menjawab: 14.04 dan lebih tinggi . 14,04 harus digunakan hanya jika itu satu-satunya versi yang terpengaruh, yang tidak benar sejak 14.10 memilikinya. BTW, jangan bertanya tentang bug.
Braiam

@Braiam 1. Saya tidak tahu nanti !! Bagaimana bisa saya? Belum ada versi yang lebih baru. Sampai sekarang hanya 14,04. Dan saya tidak bertanya tentang bug. Jadi, jika Anda tidak keberatan, saya akan mengembalikan hasil edit Anda.
d_inevitable


1
@Braiam itu bukan rilis.
d_inevitable

Jawaban:


6

Ini bekerja untuk saya:

Di baris perintah:

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

Papan ketik di layar muncul saat Anda masuk pertama kali tetapi Anda dapat menutupnya.

Setelah ini gnome-screensaver-command -dberhasil.

Diambil dari benshayden di https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/1307163


Ini harus dinilai jauh lebih tinggi daripada jawaban lainnya. Anda tidak boleh memasukkan kata sandi Anda di skrip ini, ini benar-benar buruk!
Patrick Cornelissen

3

Sayangnya tidak ada cara untuk melakukan ini :(

Perbarui - Saya telah menemukan cara. Lihat jawaban saya yang lebih baru

Ini adalah solusi saya sebelumnya - Tidak disarankan untuk digunakan, tidak bisa dibuka jika Anda kehilangan ponsel; Anda harus memulai ulang untuk membukanya

Saya akhirnya menemukan solusi - jangan menguncinya sejak awal. Ini mungkin terdengar aneh.

Alih-alih menguncinya, saya menonaktifkan Mouse dan Keyboard, menyembunyikan semua ikon desktop dan kemudian beralih ke desktop. Anda mungkin bisa menyembunyikan lebih banyak barang (seperti peluncur) tetapi saya tetap menyembunyikannya.

Perintah ini membutuhkan sedikit pengaturan.

Instal: xdotool - sudo apt-get install xdotool

Masukkan: xinput --listdan catat id mouse dan keyboard Anda.

Saya akan menyarankan untuk mengedit perintah-perintah ini di gedit

Yang ini bertindak sebagai loker.

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

Ini bertindak sebagai pembuka kunci.

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

Ubah dan ke nomor masing-masing, di kedua perintah.

Dalam urutan ini:

  • Menonaktifkan / Mengaktifkan Keyboard
  • Menonaktifkan / Mengaktifkan Mouse
  • Menyembunyikan / Menunjukkan semua ikon desktop Anda
  • Beralih menampilkan desktop Anda.

Satu hal penting yang perlu diingat - ini tidak dapat diurungkan tanpa perangkat bluetooth Anda. Jika karena alasan tertentu gagal, Anda harus memulai ulang. Karena itu, mungkin disarankan untuk membiarkan keyboard tetap aktif, dan mengatur perintah buka kunci ke pintasan yang dipilih.


Hai ide bagus! Apakah mungkin untuk mengubah sedemikian rupa sehingga input keyboard apa pun akan mengunci layar sebagai gantinya (memberikan peluang untuk membuka kunci tanpa perangkat bluetooth) alih-alih mengabaikan semua input keyboard?
d_inevitable

Itu lebih baik! Saya baru saja akan mengirim ide lain, tetapi saya akan mulai mengusahakannya!
Tim

@d_inevitable Lihat jawaban baru saya, lebih rapi (terutama metode kedua). Saya cukup yakin itu berhasil.
Tim

1

Jadi, saya pikir cara "terbaik" untuk melakukan ini (apocryphal, karena kita masih menyimpan kata sandi dan berpura - pura mengetiknya menjadi sesuatu ) adalah, seperti yang saya komentari di atas, mengenkripsi kata sandi ke kunci USB entri. Agak berantakan skrip, jadi saya akan menjelaskan apa yang terjadi.

Perangkat untuk pengguna saat ini disebutkan dengan melihat melalui /etc/pamusb.conf dengan xpath; masing-masing kemudian dikawinkan dengan UUID menggunakan xpath, dan UUID dipetakan ke perangkat menggunakan blkid.

Anda memiliki pilihan untuk mengunci, membuka kunci perangkat pertunjukan, atau mengatur kunci Anda. Ketika Anda menjalankan pengaturan, itu akan membuat ~ / .ssh / pamusb_rsa jika tidak ada. Anda kemudian akan diminta untuk memilih perangkat (atau tidak, jika hanya ada satu), dan untuk memasukkan kata sandi Anda. PW Anda akan disimpan, dienkripsi, di {device} /. Pamusb / .auth.

Ketika Anda menjalankan buka kunci, perangkat-perangkat tersebut disebutkan kembali, dan diperiksa satu per satu untuk file /.pamusb/.auth. Ketika seseorang terlihat, dekripsi akan dicoba dan, jika berhasil, akan digunakan untuk mengetikkan kata sandi Anda ke dalam apa pun yang kebetulan menerima teks pada saat itu. Itu hanya akan mengizinkan dijalankan ketika sesi terkunci, jadi mudah-mudahan, ini tidak akan mengekspos Anda terlalu buruk.

Saya menamai ini ~ / .bin / unity-lock-control (~ / .bin ada di jalur saya), dan memiliki "unity-lock-control lock" dan "unity-lock-control unlock" sebagai agen saya di 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

Memperbarui! Ada cara untuk menggunakan layar kunci normal! Yay!

Saya tidak tahu seberapa aman itu (menyimpan kata sandi Anda di plaintext), tapi saya pikir itu yang terbaik.

Ini adalah perintah kunci: gnome-screensaver -d

Ada 2 perintah buka kunci:

No1:

Ini adalah perintah membuka kunci 1:

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

Klik untuk membangunkannya (klik di dalam kotak login, karena gerakan mouse), dan perlihatkan layar kunci baru yang bagus, alih-alih layar hitam "tidur".

Kemudian ia mengetik mypassword123!dengan enter, untuk mengirimkannya, ke dalam kotak teks.

Penting. Untuk beberapa alasan - mungkin karena xdotool sebenarnya dimaksudkan untuk digunakan (pintasan keyboard) - Anda tidak dapat memasukkan huruf ganda. Untuk menyiasatinya, bagi menjadi 2 perintah di setiap huruf ganda (seperti di atas). Juga, angka harus memiliki perintah terpisah dari huruf (juga di atas). Akhirnya, pengubah (seperti shift) perlu yang terpisah, seperti halnya tombol Return.


No2:

Ini yang kedua. Ini sedikit lebih baik dan lebih sedikit peretasan, tetapi membutuhkan banyak pengaturan.

Pertama instal actionaz:

sudo apt-get install actionaz

Buka skrip baru, dan seret item yang benar ke aliran Anda. (Anda dapat mengunduh yang sudah selesai di sini . Jika Anda memilih untuk mengunduh ini, buka, klik dua kali pada Tulis teks - Kata Sandi di sini, dan masukkan kata sandi Anda).

  1. Jeda: masukkan 3 detik.
  2. Klik: salin dan tempel 165:555ke kotak Posisi. (Tergantung pada sisi layar, ini mungkin berbeda. Pastikan itu mengklik di kotak kata sandi, kalau tidak itu tidak berfungsi).
  3. Tulis teks: masukkan kata sandi Anda di dalam kotak
  4. Kunci: Klik di dalam kotak dan tekan Return

Simpan di folder rumah Anda sebagai unlock.ascr (atau nama apa pun - saya hanya tidak ingin mengiklankan bahwa sandi saya di dalamnya)

Atur perintah kedekatan Anda menjadi:

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

Gerakan mouse membangunkannya, dan opsi mengatakannya untuk menjalankan skrip dan kemudian keluar di akhir.


Jika perangkat Anda hilang, Anda selalu bisa mengetikkan kata sandi, sehingga bisa dibalik.


2
Hei, ini terlihat cukup bagus, tetapi sayangnya menyimpan kata sandi dalam teks bersih bukan pilihan. Hampir sama buruknya menjalankan semua yang ada di root seperti pengguna saya ada di daftar sudoers. Tapi saya pikir kombinasi dari dua jawaban Anda akan berhasil. Saya akan mencoba sesuatu sesegera mungkin. Pada dasarnya meredupkan layar hingga mouse bergerak, tombol ditekan atau perangkat bluetooth kembali dalam jangkauan. Jika mouse bergerak atau tombol ditekan, aktifkan kembali layar dan jalankan gnome-screensaver-command -lsehingga kata sandi dapat dimasukkan saat perangkat bluetooth tidak ada. Saya pikir itu harus bisa dilakukan.
d_inevitable

Saya memang cepat melihat opsi 'mouse move' ... Saya berpikir bahwa xev mungkin dapat melakukan itu? Anda dapat mengaturnya bahwa mouse bergerak di atas jendela xev, dan jika output berubah, Anda tahu ada sesuatu yang memiliki terjadi.
Tim

Setuju, menyimpan kata sandi dalam teks biasa sangat buruk. Memiliki homedir Anda terenkripsi - seperti yang saya pikir adalah default sekarang di Ubuntu - akan membuatnya sedikit lebih buruk. Saya sudah bermain-main dengannya, dan sebenarnya menemukan solusi # 1 jauh lebih mudah, dan tidak benar-benar menganggap itu semua peretasan. Membuat perubahan kecil. Alih-alih mousemove, saya dimasukkan ke dalam gnome-screensaver -dyang masih bangun layar dan memungkinkan saya untuk memiliki yang lebih pendek sleep(saya sudah mengaturnya sekarang menjadi 0,1, tetapi bertanya-tanya apakah itu diperlukan sama sekali)
Wouter Van Vliet

Saya berpikir bahwa saya dapat menulis file pada kunci dengan kata sandi saya, dienkripsi menggunakan kunci saya dari .ssh / id_rsa, dan menulis skrip untuk mendekripsi dan memasukkannya untuk login. Saya akan memberi tahu Anda jika saya berhasil.
Fordi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.