ปลดล็อกหน้าจอใน 14.04 โดยไม่ต้อง 'gnome-screensaver-command`


10

ฉันได้รับการอย่างมีความสุขโดยใช้ blueproximity ใน 13.10 แต่เนื่องจากอัพเกรด 14.04 มันล็อคเมื่อโทรศัพท์ของฉันออกไปจากช่วง (ใช้gnome-screensaver-command -l) gnome-screensaver-command -dแต่มันไม่ได้ปลดล็อคด้วย

ตอนนี้เหตุผลที่gnome-screensaver-command -dไม่ทำงานเป็นเพราะข้อผิดพลาด

อย่างไรก็ตามในรายงานข้อผิดพลาดดังกล่าวมีการกล่าวถึงว่า gnome-screensaver ไม่ได้ถูกใช้ในความน่าเชื่อถืออีกต่อไปและดังนั้นจึงgnome-screensaver-commandคาดว่าจะถูกยุติการใช้งานซึ่งอาจเกี่ยวข้องกับสาเหตุที่คำสั่งไม่ทำงาน

ดังนั้นคำถามของฉันคือถ้าเปลี่ยน gnome-screensaver แล้วคำสั่งใหม่ในการปลดล็อกหน้าจอโดยไม่ต้องพึ่งgnome-screensaver-commandอะไร


@Braiam คำถามนี้เฉพาะสำหรับ 14.04 และใหม่กว่า ทำไมคุณลบแท็ก ไม่มีเหตุผลว่าทำไมต้องหลีกเลี่ยงการใช้gnome-screensaver-commandในรุ่นก่อนหน้า!
d_inevitable

ตัวเองตอบ: 14.04 และต่อมา ควรใช้ 14.04 เฉพาะในกรณีที่เป็นเวอร์ชันที่ได้รับผลกระทบเท่านั้นซึ่งไม่เป็นความจริงตั้งแต่ 14.10 BTW อย่าถามเกี่ยวกับข้อบกพร่อง
Braiam

@Braiam 1. ฉันไม่รู้ในภายหลัง !! ฉันสามารถ? ยังไม่มีรุ่นภายหลัง ณ ตอนนี้มันเป็นเพียง 14.04 และฉันไม่ได้ถามเกี่ยวกับข้อบกพร่อง ดังนั้นหากคุณไม่รังเกียจฉันจะยกเลิกการแก้ไขของคุณ
d_inevitable

อย่างจริงจัง? cdimage.ubuntu.com/daily-live/currentลองใช้ดู
Braiam

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


นี่ควรจะได้คะแนนสูงกว่าคำตอบอื่น ๆ คุณไม่ควรใส่รหัสผ่านในสคริปต์เหล่านี้มันแย่จริงๆ!
Patrick Cornelissen

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

เปลี่ยนและเป็นหมายเลขที่เกี่ยวข้องในทั้งสองคำสั่ง

ในการสั่งซื้อนี้:

  • ปิดใช้งาน / เปิดใช้งานคีย์บอร์ด
  • ปิดการใช้งาน / เปิดใช้งานเมาส์
  • ซ่อน / แสดงไอคอนเดสก์ท็อปทั้งหมดของคุณ
  • สลับการแสดงเดสก์ท็อปของคุณ

สิ่งสำคัญที่ควรคำนึงถึง - สิ่งนี้ไม่สามารถยกเลิกได้หากไม่มีอุปกรณ์บลูทู ธ ของคุณ ถ้าด้วยเหตุผลบางอย่างมันล้มเหลวคุณต้องรีสตาร์ท ด้วยเหตุนี้จึงแนะนำให้เปิดใช้งานคีย์บอร์ดและตั้งค่าคำสั่งปลดล็อคให้เป็นทางลัดที่เลือก


เฮ้ความคิดที่ดี! เป็นไปได้ไหมที่จะเปลี่ยนแปลงเช่นว่าคีย์บอร์ดจะล็อคหน้าจอแทน (ให้โอกาสในการปลดล็อคโดยไม่มีอุปกรณ์บลูทู ธ ) แทนที่จะเพิกเฉยต่อคีย์บอร์ดทั้งหมด?
d_inevitable

ดียิ่งขึ้น! ฉันกำลังจะโพสต์แนวคิดอื่น แต่ฉันจะทำต่อไป!
ทิม

@d_inevitable ดูคำตอบใหม่ของฉันมันเป็น neater (โดยเฉพาะวิธีที่ 2) ฉันค่อนข้างแน่ใจว่ามันใช้งานได้
ทิม

1

ดังนั้นฉันจึงคิดว่าวิธีที่ดีที่สุดในการทำเช่นนี้ (apocryphal เนื่องจากเรายังคงจัดเก็บรหัสผ่านและการพิมพ์ลงในสิ่งต่าง ๆ ) จะเป็นอย่างที่ฉันแสดงความคิดเห็นข้างต้นเข้ารหัสรหัสผ่านไปยังคีย์ USB รายการ สคริปต์มันยุ่งเล็กน้อยดังนั้นฉันจะอธิบายสิ่งที่เกิดขึ้น

อุปกรณ์สำหรับผู้ใช้ปัจจุบันระบุโดยดูผ่าน /etc/pamusb.conf ด้วย xpath; แต่ละคนจะแต่งงานกับ UUID โดยใช้ xpath และ UUID ที่แมปกับอุปกรณ์โดยใช้ blkid

คุณมีทางเลือกในการล็อคปลดล็อกอุปกรณ์แสดงหรือตั้งค่าคีย์ของคุณ เมื่อคุณเรียกใช้การตั้งค่ามันจะสร้าง ~ / .ssh / pamusb_rsa หากไม่มีอยู่ จากนั้นคุณจะถูกขอให้เลือกอุปกรณ์ (หรือหากมีเพียงเครื่องเดียว) และป้อนรหัสผ่านของคุณ PW ของคุณจะถูกจัดเก็บเข้ารหัสใน {อุปกรณ์} /. pamusb / .auth

เมื่อคุณรันการปลดล็อคอุปกรณ์จะถูกระบุอีกครั้งและตรวจสอบทีละไฟล์สำหรับไฟล์ /.pamusb/.auth เมื่อมีคนเห็นการถอดรหัสจะถูกพยายามและหากประสบความสำเร็จจะใช้ในการพิมพ์รหัสผ่านของคุณเป็นสิ่งที่เกิดขึ้นที่จะยอมรับข้อความในขณะนี้ มันจะมีเพียงใบอนุญาตทำงานเมื่อเซสชั่นถูกล็อคเพื่อหวังว่านี้จะไม่เปิดเผยให้คุณเลวร้ายเกินไป

ฉันชื่อ ~ / .bin / unity-lock-control (~ / .bin อยู่บนเส้นทางของฉัน) และมี "unity-lock-control lock" และ "unity-lock-control unlock" เป็นตัวแทนของฉันใน 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

Update! มีวิธีใช้หน้าจอล็อคปกติ! เย้!

ฉันไม่รู้ว่ามันปลอดภัยแค่ไหน (เก็บรหัสผ่านของคุณไว้ในรูปแบบธรรมดา) แต่ฉันคิดว่ามันเป็นวิธีที่ดีที่สุด

นี่คือคำสั่งล็อค: gnome-screensaver -d

มี 2 ​​คำสั่งปลดล็อค:

No1:

นี่คือคำสั่งปลดล็อกครั้งแรก:

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

คลิกคือการปลุก (ควรคลิกภายในกล่องเข้าสู่ระบบเนื่องจากการเลื่อนเมาส์) และแสดงหน้าจอล็อคใหม่ที่ดีแทนที่จะเป็นหน้าจอสีดำ "นอน"

จากนั้นพิมพ์mypassword123!ด้วยการป้อนเพื่อส่งลงในกล่องข้อความ

สิ่งสำคัญ. ด้วยเหตุผลบางอย่าง - อาจเป็นเพราะสิ่งที่ xdotool ใช้สำหรับ (แป้นพิมพ์ลัด) - คุณไม่สามารถป้อนตัวอักษรสองตัวได้ หากต้องการหลีกเลี่ยงปัญหานี้ให้แบ่งออกเป็น 2 คำสั่งในตัวอักษรสองตัว (ตามข้างบน) นอกจากนี้ตัวเลขต้องมีคำสั่งแยกต่างหากจากตัวอักษร (เช่นด้านบน) สุดท้ายตัวดัดแปลง (เช่น shift) จำเป็นต้องใช้ตัวแยกเช่นกันเช่นเดียวกับปุ่ม Return


No2:

นี่เป็นครั้งที่สอง มันค่อนข้างดีและไม่แฮ็ค แต่ก็ต้องมีการตั้งค่ามากมาย

Actionaz ติดตั้งครั้งแรก:

sudo apt-get install actionaz

เปิดสคริปต์ใหม่แล้วลากรายการที่ถูกต้องไปยังโฟลว์ของคุณ (คุณสามารถดาวน์โหลดไฟล์ที่เสร็จสมบูรณ์ได้ที่นี่ถ้าคุณเลือกที่จะดาวน์โหลดให้เปิดดับเบิลคลิกที่เขียนข้อความ - รหัสผ่านที่นี่และป้อนรหัสผ่านของคุณ)

  1. หยุดชั่วคราว: ป้อน 3 วินาที
  2. คลิก: คัดลอกและวาง165:555ลงในกล่องตำแหน่ง (ขึ้นอยู่กับหน้าจอนี้อาจแตกต่างกันตรวจสอบให้แน่ใจว่าคลิกในช่องรหัสผ่านมิฉะนั้นจะไม่ทำงาน)
  3. เขียนข้อความ: ป้อนรหัสผ่านของคุณในช่อง
  4. รหัส: คลิกในกล่องและกด Return

บันทึกไว้ในโฟลเดอร์บ้านของคุณเป็น unlock.ascr (หรือชื่ออื่น ๆ - ฉันไม่ต้องการโฆษณาว่ามีรหัสผ่านอยู่)

ตั้งค่าคำสั่งใกล้เคียงของคุณเป็น:

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

การเลื่อนเมาส์จะทำให้มันตื่นขึ้นและตัวเลือกจะบอกให้รันสคริปต์และจากนั้นออกในตอนท้าย


หากคุณทำอุปกรณ์ของคุณหายคุณสามารถพิมพ์รหัสผ่านของคุณได้ตลอดเวลา


2
เฮ้นี่ดูดีทีเดียว แต่น่าเสียดายที่การจัดเก็บรหัสผ่านในข้อความธรรมดาไม่ใช่ตัวเลือก มันเกือบจะแย่ไปกว่าการทำงานทุกอย่างในรูทเป็นผู้ใช้ของฉันอยู่ในรายการ sudoers แต่ฉันคิดว่าการรวมกันของสองคำตอบของคุณจะได้ผล ฉันจะลองทำบางสิ่งให้เร็วที่สุด โดยทั่วไปหรี่หน้าจอจนกว่าเมาส์จะเลื่อนปุ่มถูกกดหรืออุปกรณ์บลูทู ธ กลับมาอยู่ในช่วง หากเลื่อนเมาส์หรือกดปุ่มให้เปิดหน้าจอขึ้นใหม่แล้วเปิดใช้งานgnome-screensaver-command -lเพื่อให้สามารถป้อนรหัสผ่านในขณะที่อุปกรณ์บลูทู ธ ขาดหายไป ฉันคิดว่ามันควรจะเป็นไปได้
d_inevitable

ฉันดูที่ตัวเลือก 'mouse move' อย่างรวดเร็ว ... ฉันคิดว่า xev อาจทำเช่นนั้นได้หรือไม่คุณสามารถตั้งค่าให้มันเลื่อนเมาส์ไปที่หน้าต่าง xev และหากผลลัพธ์เปลี่ยนไป ที่เกิดขึ้น
ทิม

เห็นด้วยว่าการจัดเก็บรหัสผ่านเป็นข้อความธรรมดานั้นค่อนข้างแย่ การเข้ารหัส homedir ของคุณ - อย่างที่ฉันคิดว่าตอนนี้เป็นค่าเริ่มต้นใน Ubuntu - จะทำให้มันแย่ลงไปหน่อย ฉันได้ลองเล่นดูแล้วและหาวิธีแก้ปัญหา # 1 ง่ายกว่าและไม่คิดว่ามันแฮ็คทั้งหมด ทำการเปลี่ยนแปลงเล็กน้อยแม้ว่า แทนที่จะวางเมาส์ฉันวางไว้ในgnome-screensaver -dขณะที่ยังคงตื่นหน้าจอและทำให้ฉันสั้นลงมากsleep(ฉันได้ตั้งไว้ที่ 0.1 แต่สงสัยว่ามันจำเป็นเลย)
Wouter Van Vliet

ฉันคิดว่าฉันสามารถเขียนไฟล์บนคีย์ด้วยรหัสผ่านของฉันเข้ารหัสโดยใช้คีย์ของฉันจาก. ssh / id_rsa และเขียนสคริปต์เพื่อถอดรหัสและป้อนเพื่อเข้าสู่ระบบ ฉันจะแจ้งให้คุณทราบหากฉันประสบความสำเร็จ
Fordi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.