Розблокуйте екран у 14.04 без "gnome-screensaver-command"


10

Я із задоволенням використовую blueproximity в 13.10, але після оновлення до 14.04 він блокується лише тоді, коли мій телефон виходить за межі діапазону (використовує gnome-screensaver-command -l), але він не розблоковується gnome-screensaver-command -d.

Тепер причина, gnome-screensaver-command -dяка не працює - через помилку .

Однак у цьому звіті про помилку зазначається, що заставка gnome більше не використовується надійно, а тому gnome-screensaver-commandочікується, що вона буде припинена, що також може бути пов'язане з тим, чому команда не працює.

Отже, моє запитання: якщо замінити заставку gnome-screensaver, то яка б нова команда розблокувати екран, не покладаючись на це gnome-screensaver-command?


@Braiam Це питання стосується 14.04 та пізніших версій. Чому ви видалили тег? Немає причин, щоб не уникати використання gnome-screensaver-commandв попередніх версіях!
d_inevitable

Ви відповіли: 14.04 і пізніше . 14.04 слід використовувати лише в тому випадку, якщо це єдина версія, на яку вплинуто, що не відповідає дійсності, оскільки в 14.10 є. До речі, про помилки не питайте.
Брайам

@Braiam 1. Я не знаю про це пізніше !! Як я можу? Більш пізньої версії поки немає. На сьогодні це лише 14.04. А про помилок я не питав. Тож якщо ви не заперечуєте, я поверну вам зміни.
d_inevitable

Серйозно? cdimage.ubuntu.com/daily-live/current спробуйте.
Брайам

1
@Braiam, це не випуск.
d_inevitable

Відповіді:


6

Це працювало для мене:

У командному рядку:

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

Екранна клавіатура з'являється під час першого входу, але ви можете її закрити.

Після цього gnome-screensaver-command -dпрацює.

Взято з benshayden на https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/1307163


Це має бути набагато вище, ніж інші відповіді. Не слід вводити свій пароль у ці сценарії, це справді погано!
Патрік Корнеліссен

3

На жаль, це не можливо зробити :(

Оновлення - я знайшов спосіб. Ознайомтеся з моєю новою відповіддю

Це моє попереднє рішення - використовувати його недоцільно, його не можна розблокувати, якщо ви втратите телефон; вам потрібно перезапустити його, щоб розблокувати його

Зрештою, я придумав рішення - не блокуйте його в першу чергу. Це може здатися дивним.

Замість того, щоб заблокувати це, я відключив мишу та клавіатуру, заховав усі піктограми робочого столу та перейшов на робочий стіл. Ви, можливо, можете приховати більше речей (як, наприклад, пускова установка), але я все одно це заховав.

Ця команда вимагає трохи налаштування.

Встановити: xdotool - sudo apt-get install xdotool

Введіть: xinput --listі запишіть ідентифікатори миші та клавіатури.

Я б запропонував редагувати ці команди в gedit

Цей діє як шафка.

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

Це діє як розблокування.

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

В обох командах змініть і на їх відповідні номери.

Для цього:

  • Вимикає / вмикає клавіатуру
  • Вимикає / вмикає мишу
  • Приховує / показує всі значки робочого столу
  • Перемикає на робочому столі.

Одне важливе, що потрібно пам’ятати - це не можна скасувати без Bluetooth-пристрою. Якщо з якихось причин це не вдається, вам доведеться перезапустити. Через це, можливо, буде доцільно залишити клавіатуру увімкненою та встановити команду розблокування на вибраний ярлик.


Гей приємна ідея! Чи вдасться змінити таке, що будь-який вхід на клавіатурі замість екрана заблокує екран (даючи можливість розблокувати його без пристрою Bluetooth), а не ігнорувати весь вхід клавіатури?
d_inevitable

Це ще краще! Я збирався опублікувати ще одну ідею, але я над цим працюю!
Тім

@d_inevitable Подивіться на мою нову відповідь, вона акуратніша (особливо 2-й метод). Я майже впевнений, що це працює.
Тім

1

Отже, я зрозумів, що "найкращий" спосіб зробити це (апокрифний, оскільки ми все ще зберігаємо пароль і підробляємо його введення в річ ) було б, як я коментував вище, зашифрувати пароль до вхідного ключа USB. Це трохи безладний сценарій, тому я поясню, що відбувається.

Пристрої для поточного користувача перераховуються, переглядаючи /etc/pamusb.conf з xpath; кожен з них потім зв'язується зі своїм UUID за допомогою xpath, а UUID відображається на пристрої, що використовує blkid.

Ви можете заблокувати, розблокувати показ пристрою або налаштувати ключ. Під час запуску установки він створить ~ / .ssh / pamusb_rsa, якщо його не існує. Потім буде запропоновано вибрати пристрій (чи ні, якщо він є лише один) та ввести свій пароль. Ваш PW буде зберігатися, зашифрований у {device} /. Pamusb / .auth.

При запуску розблокування пристрої перераховуються ще раз і перевіряються один за одним на файл /.pamusb/.auth. Коли хтось буде помічений, буде зроблено спробу розшифровки, і, якщо це буде успішно, він буде використаний для введення вашого пароля в те, що трапляється на момент прийняття тексту. Це дозволить запустити лише тоді, коли сеанс заблокований, тому, сподіваємось, це не викриє вас занадто погано.

Я назвав це ~ / .bin / Unіnt-lock-control (~ / .bin на моєму шляху), і я "агент-блокування-блокування-контроль" та "Єдність-замок-контроль-розблокування", як мої агенти в пам.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

Оновлення! Є спосіб використовувати звичайний екран блокування! Так!

Я не знаю, наскільки це безпечно (зберігання пароля в простому тексті), але я думаю, що це найкраще.

Це команда блокування: gnome-screensaver -d

Є дві команди розблокування:

№1:

Це перша команда розблокування:

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

Клацання полягає в тому, щоб його розбудити (він повинен натиснути все поле для входу через рух миші) і показати новий приємний екран блокування замість «сплячого» чорного екрана.

Потім він вводить mypassword123!із текстом, щоб подати його, у текстове поле.

Важливо. Чомусь - можливо, через те, що насправді використовується xdotool (комбінації клавіш) - ви не можете вводити подвійні літери. Щоб обійти це, розділіть його на 2 команди на кожну подвійну букву (як вище). Також цифри повинні мати свою, окрему команду від букв (також вище). Нарешті, модифікатори (наприклад, shift) потребують окремого, як і клавіша Return.


№2:

Це другий. Це трохи краще і менш хакітно, але вимагає багато налаштування.

Спочатку встановіть actionaz:

sudo apt-get install actionaz

Відкрийте новий сценарій та перетягніть правильні елементи до потоку. (Ви можете завантажити заповнений тут . Якщо ви вирішили завантажити це, відкрийте його, двічі клацніть на Написати текст - Пароль тут і введіть свій пароль).

  1. Пауза: введіть 3 секунди.
  2. Клацніть: скопіюйте та вставте 165:555у поле Позиція. (Залежно від екрану, це може бути різним. Переконайтеся, що він натискає у вікні пароля, інакше він не працює).
  3. Написати текст: введіть свій пароль у поле
  4. Ключ: Клацніть у полі та натисніть Повернення

Збережіть це у своїй домашній папці як unlock.ascr (або будь-яке ім’я - я просто не хотів рекламувати, що в ньому мій пароль)

Налаштуйте команду близькості таким чином:

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

Рух миші прокидає його, і параметри вказують йому виконати сценарій, а потім вийти в кінці.


Якщо ви втратите свій пристрій, ви завжди можете просто ввести свій пароль, щоб він був оборотним.


2
Гей, це виглядає досить добре, але, на жаль, зберігати пароль у чистому тексті - це не варіант. Це майже так само погано, що працює все в корені, як і мій користувач у списку sudoers. Але я думаю, що поєднання ваших двох відповідей спрацювало б. Я щось спробую, як тільки зможу. В основному тьмяний екран, поки миша не рухається, не натискається клавіша або пристрій Bluetooth не повертається в простір. Якщо рухається миша або натискається клавіша, увімкніть екран і запустіть gnome-screensaver-command -lтак, щоб можна було ввести пароль, коли пристрій Bluetooth відсутній. Я думаю, що це повинно бути виконано.
d_inevitable

Я швидко переглянув варіант "переміщення миші" ... Я думав, що xev може це зробити? Ви можете встановити, що миша рухається над вікном xev, і якщо вихід зміниться, ви знаєте, що щось має сталося.
Тім

Погодьтеся, зберігання пароля у простому тексті досить погано. Якщо ваш homedir зашифрований - як я вважаю, що це за замовчуванням в Ubuntu - це зробило би його трохи менше погано. Я трохи пограв із цим, і насправді знайти рішення №1 набагато простіше, і насправді не вважати все таким хакішем. Хоча внесла невеликі зміни. Замість того, щоб рухатись мишею, я ввімкнув gnome-screensaver -dтак, що все ще прокидається екран і дає мені можливість набагато коротше sleep(я встановив його зараз на 0,1, але цікаво, чи це взагалі потрібно)
Wouter Van Vliet

Я думав, що можу написати на ключ файл зі своїм паролем, зашифрований за допомогою мого ключа від .ssh / id_rsa, і написати сценарій, щоб розшифрувати та ввести його для входу. Я дам вам знати, чи маю я успіх.
Форді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.