Mở khóa màn hình trong 14.04 mà không có `gnome-Screensaver-lệnh`


10

Tôi đã rất vui khi sử dụng blueproighbor trong 13.10, nhưng kể từ khi nâng cấp lên 14.04, nó chỉ khóa khi điện thoại của tôi nằm ngoài phạm vi (sử dụng gnome-screensaver-command -l), nhưng nó không mở khóa được gnome-screensaver-command -d.

Bây giờ lý do gnome-screensaver-command -dkhông hoạt động là do một lỗi .

Tuy nhiên, trên báo cáo lỗi đó, người ta đã đề cập rằng trình bảo vệ màn hình gnome không còn được sử dụng một cách đáng tin cậy và do đó gnome-screensaver-commanddự kiến ​​sẽ được loại bỏ, điều này cũng có thể liên quan đến lý do tại sao lệnh không hoạt động.

Vì vậy, câu hỏi của tôi là, nếu thay thế trình bảo vệ màn hình gnome, thì lệnh mới để mở khóa màn hình mà không cần dựa vào là gnome-screensaver-commandgì?


@Braiam Câu hỏi này dành riêng cho 14.04 trở lên. Tại sao bạn xóa thẻ? Không có lý do tại sao để tránh sử dụng gnome-screensaver-commandtrong các phiên bản trước!
d_inevitable

Chính bạn đã trả lời: 14.04 và sau đó . 14.04 chỉ nên được sử dụng nếu đó là phiên bản duy nhất bị ảnh hưởng, điều này không đúng kể từ ngày 14.10. BTW, đừng hỏi về lỗi.
Braiam

@Braiam 1. Tôi không biết về sau !! Làm thế nào tôi có thể? Không có phiên bản mới hơn. Đến bây giờ chỉ còn 14.04. Và tôi đã không hỏi về lỗi. Vì vậy, nếu bạn không phiền, tôi sẽ hoàn nguyên chỉnh sửa của bạn.
d_inevitable

Nghiêm túc? cdimage.ubfox.com/daily-live/c Hiện hãy dùng thử.
Braiam

1
@Braiam đó không phải là một bản phát hành.
d_inevitable

Câu trả lời:


6

Điều này làm việc cho tôi:

Trên dòng lệnh:

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

Bàn phím trên màn hình xuất hiện khi bạn đăng nhập lần đầu nhưng bạn có thể đóng nó.

Sau này gnome-screensaver-command -dhoạt động.

Lấy từ benshayden trên https://bugs.launchpad.net/ubfox/+source/gnome-sc Greensaver / +bug / 1307163


Điều này nên được đánh giá cao hơn nhiều so với các câu trả lời khác. Bạn không nên đặt mật khẩu của bạn trong các tập lệnh này, điều này thực sự tồi tệ!
Patrick Cornelissen

3

Không có cách nào để làm điều này thật đáng tiếc :(

Cập nhật - Tôi đã tìm thấy một cách. Kiểm tra câu trả lời mới hơn của tôi

Đây là giải pháp trước đây của tôi - Không thể sử dụng được, nó không thể mở khóa nếu bạn làm mất điện thoại; bạn phải khởi động lại để mở khóa

Cuối cùng tôi đã đưa ra một giải pháp - đừng khóa nó ngay từ đầu. Điều này nghe có vẻ kỳ quặc - chịu đựng.

Thay vì khóa nó, tôi đã tắt Chuột và Bàn phím, ẩn tất cả các biểu tượng trên màn hình và sau đó chuyển sang màn hình nền. Bạn có thể có thể ẩn nhiều thứ hơn (như launcher) nhưng dù sao thì tôi cũng ẩn nó.

Lệnh này yêu cầu một chút thiết lập.

Cài đặt: xdotool - sudo apt-get install xdotool

Nhập: xinput --listvà ghi chú id chuột và bàn phím của bạn.

Tôi sẽ đề nghị chỉnh sửa các lệnh này trong gedit

Điều này hoạt động như tủ khóa.

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

Điều này hoạt động như mở khóa.

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

Thay đổi và thành số tương ứng của chúng, trong cả hai lệnh.

Theo thứ tự này:

  • Tắt / Bật bàn phím
  • Tắt / Bật chuột
  • Ẩn / Hiển thị tất cả các biểu tượng máy tính để bàn của bạn
  • Kính hiển thị máy tính để bàn của bạn.

Một điều quan trọng cần lưu ý - điều này không thể hoàn tác nếu không có thiết bị bluetooth của bạn. Nếu vì lý do nào đó nó thất bại, bạn phải khởi động lại. Do đó, có thể nên để bàn phím được bật và thiết lập lệnh mở khóa thành một phím tắt đã chọn.


Này ý tưởng hay! Thay vào đó, có thể thay đổi sao cho bất kỳ đầu vào bàn phím nào sẽ khóa màn hình (tạo cơ hội mở khóa mà không cần thiết bị bluetooth) thay vì bỏ qua tất cả đầu vào bàn phím?
d_inevitable

Điều đó thậm chí còn tốt hơn! Tôi vừa định đăng một ý tưởng khác, nhưng tôi sẽ bắt tay vào làm!
Tim

@d_inevitable Hãy xem câu trả lời mới của tôi, nó gọn gàng hơn (đặc biệt là phương pháp thứ 2). Tôi khá chắc chắn rằng nó hoạt động.
Tim

1

Vì vậy, tôi đã tìm cách "tốt nhất" để làm điều này (ngụy, vì chúng ta vẫn còn đang lưu trữ mật khẩu và giả mạo gõ nó vào một điều ) sẽ được, như tôi nhận xét ở trên, mã hóa mật khẩu để chìa khóa vào USB. Đó là một chút lộn xộn của một kịch bản, vì vậy tôi sẽ giải thích những gì đang xảy ra.

Các thiết bị cho người dùng hiện tại được liệt kê bằng cách xem qua /etc/pamusb.conf với xpath; mỗi cái sau đó được giao phối với UUID của nó bằng xpath và UUID được ánh xạ tới một thiết bị sử dụng blkid.

Bạn có thể chọn khóa, mở khóa thiết bị hiển thị hoặc thiết lập khóa của bạn. Khi bạn chạy thiết lập, nó sẽ tạo ~ / .ssh / pamusb_rsa nếu nó không tồn tại. Sau đó, bạn sẽ được yêu cầu chọn một thiết bị (hoặc không, nếu chỉ có một) và nhập mật khẩu của bạn. PW của bạn sẽ được lưu trữ, mã hóa, trong {device} /. Pamusb / .auth.

Khi bạn chạy mở khóa, các thiết bị được liệt kê lại và kiểm tra từng cái một cho tệp /.pamusb/.auth. Khi một người phát hiện, việc giải mã sẽ được thử và nếu thành công, sẽ được sử dụng để nhập mật khẩu của bạn vào bất cứ điều gì xảy ra để chấp nhận văn bản tại thời điểm này. Nó sẽ chỉ cho phép chạy khi phiên bị khóa, vì vậy, hy vọng, điều này sẽ không làm bạn quá tệ.

Tôi đặt tên này là ~ / .bin / unity-lock-control (~ / .bin nằm trên đường của tôi) và có "khóa unity-lock-control" và "unity-lock-control" làm đại lý của tôi trong 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

Cập nhật! Có một cách để sử dụng màn hình khóa bình thường! Yay!

Tôi không biết mức độ an toàn của nó (lưu trữ mật khẩu của bạn trong bản rõ), nhưng tôi nghĩ đó là cách tốt nhất có thể.

Đây là lệnh khóa: gnome-screensaver -d

Có 2 lệnh mở khóa:

Số 1:

Đây là lệnh mở khóa đầu tiên:

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

Nhấp chuột là để đánh thức nó (cần nhấp vào bên trong hộp đăng nhập, do di chuyển chuột) và hiển thị màn hình khóa mới đẹp, thay vì màn hình đen "đang ngủ".

Sau đó, nó gõ mypassword123!với một mục nhập, để gửi nó, vào hộp văn bản.

Quan trọng. Vì một số lý do - có thể là do xdotool thực sự được dùng để làm gì (phím tắt) - bạn không thể nhập hai chữ cái. Để giải quyết vấn đề này, hãy chia nó thành 2 lệnh ở mỗi chữ cái kép (như trên). Ngoài ra, các số phải có lệnh riêng, tách biệt với các chữ cái (cũng ở trên). Cuối cùng, công cụ sửa đổi (chẳng hạn như shift) cần một cái riêng, cũng như phím Return.


Số 2:

Đây là cái thứ hai. Nó là một chút tốt hơn và ít hack hơn, nhưng đòi hỏi rất nhiều thiết lập.

Cài đặt Actionaz đầu tiên:

sudo apt-get install actionaz

Mở một tập lệnh mới và kéo các mục chính xác vào luồng của bạn. (bạn có thể tải xuống bản đã hoàn thành tại đây . Nếu bạn chọn tải xuống bản này, hãy mở nó, nhấp đúp chuột vào Viết văn bản - Mật khẩu tại đây và nhập mật khẩu của bạn).

  1. Tạm dừng: nhập 3 giây.
  2. Bấm: sao chép và dán 165:555vào hộp Vị trí. (Tùy thuộc vào phía màn hình, điều này có thể khác. Hãy chắc chắn rằng nó đang nhấp vào hộp mật khẩu, nếu không nó không hoạt động).
  3. Viết văn bản: nhập mật khẩu của bạn vào ô
  4. Phím: Bấm vào hộp và nhấn Return

Lưu nó trong thư mục nhà của bạn dưới dạng Unlock.ascr (hoặc bất kỳ tên nào - tôi chỉ không muốn quảng cáo rằng nó có mật khẩu của tôi trong đó)

Thiết lập lệnh lân cận của bạn là:

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

Chuột di chuyển đánh thức nó dậy và các tùy chọn yêu cầu nó thực thi tập lệnh và sau đó thoát ra ở cuối.


Nếu bạn mất thiết bị, bạn luôn có thể nhập mật khẩu của mình để có thể đảo ngược.


2
Này, cái này trông khá tốt, nhưng không may lưu trữ mật khẩu trong văn bản sạch không phải là tùy chọn. Nó gần như tệ khi chạy mọi thứ trong root khi người dùng của tôi nằm trong danh sách sudoers. Nhưng tôi nghĩ rằng một sự kết hợp của hai câu trả lời của bạn sẽ làm việc. Tôi sẽ thử một cái gì đó ngay khi tôi có thể. Về cơ bản làm mờ màn hình cho đến khi chuột di chuyển, một phím được nhấn hoặc thiết bị bluetooth trở lại trong phạm vi. Nếu chuột di chuyển hoặc phím được nhấn, bật lại màn hình và chạy gnome-screensaver-command -lđể có thể nhập mật khẩu trong khi không có thiết bị bluetooth. Tôi nghĩ rằng nó nên được thực hiện.
d_inevitable

Tôi đã nhanh chóng nhìn vào tùy chọn 'di chuyển chuột' ... Tôi đã nghĩ rằng xev có thể làm được điều đó? Bạn có thể thiết lập nó để chuột di chuyển qua cửa sổ xev và nếu đầu ra thay đổi, bạn biết điều gì đó có đã xảy ra.
Tim

Đồng ý, lưu trữ mật khẩu trong văn bản đơn giản là khá xấu. Việc mã hóa homedir của bạn - như tôi nghĩ là mặc định trong Ubuntu - sẽ làm cho nó bớt tệ đi một chút. Tôi đã chơi một chút với nó, và thực sự tìm thấy giải pháp số 1 dễ dàng hơn nhiều, và không thực sự coi đó là tất cả những gì đáng tiếc. Thực hiện một thay đổi nhỏ mặc dù. Thay vì mousemove, tôi đặt vào gnome-screensaver -dđó vì nó vẫn đánh thức màn hình và cho phép tôi rút ngắn hơn rất nhiều sleep(tôi đã đặt nó ở mức 0,1, nhưng tự hỏi liệu nó có cần thiết không)
Wouter Van Vliet

Tôi đã nghĩ rằng tôi có thể viết một tệp trên khóa bằng mật khẩu của mình, được mã hóa bằng khóa của tôi từ .ssh / id_rsa và viết một tập lệnh để giải mã và nhập nó để đăng nhập. Tôi sẽ cho bạn biết nếu tôi có bất kỳ thành công.
Fordi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.