Score:2

Acpid ไม่สามารถรันสคริปต์ได้

ธง cn

ฉันมีแล็ปท็อปเครื่องเก่าและติดตั้ง Ubuntu รุ่น 20.04 LTS Server (ไม่มี GUI แค่ CLI) มันจัดการผ่าน SSH ดังนั้นการแสดงผลจึงไม่จำเป็น ฉันต้องการปิดจอแสดงผลเมื่อปิดฝา และเปิดใหม่อีกครั้งหากเปิด

ฉันกำหนดค่า acpid เพื่อจัดการการแสดงผลสำเร็จแล้ว

ใน /etc/acpi/เหตุการณ์ ฉันสร้างไฟล์:

เหตุการณ์=ปุ่ม/ฝาปิด*
action=/etc/acpi/lid.sh

สคริปต์:

#!/bin/sh

grep -q ปิด /proc/acpi/button/lid/LID/state
ถ้า [ $? = 0 ]
แล้ว
    #ปิดกิจกรรม
    setterm -- แรงว่าง
อื่น
    #เปิดดำเนินการ
    setterm -- สะกิดว่าง
ไฟ

ถ้าฉันเรียกใช้สคริปต์นี้ด้วยตนเอง มันทำงานได้อย่างสมบูรณ์ แต่ดูเหมือนว่า acpi ไม่สามารถเรียกใช้สคริปต์ได้:

$ sudo journalctl -u acpid -f

...
04 ก.ค. 20:03:01 เซิร์ฟเวอร์ acpid[1179]: ได้รับเหตุการณ์เลเยอร์อินพุต "ปิดปุ่ม / ฝา LID"
4 ก.ค. 20:03:01 เซิร์ฟเวอร์ acpid[1179]: กฎจาก /etc/acpi/events/lid ตรงกัน
04 ก.ค. 20:03:01 เซิร์ฟเวอร์ acpid[1353]: กำลังดำเนินการ "/etc/acpi/lid.sh"
04 ก.ค. 20:03:01 เซิร์ฟเวอร์ acpid[1179]: การดำเนินการออกด้วยสถานะ 1
04 ก.ค. 20:03:01 เซิร์ฟเวอร์ acpid[1179]: 1 กฎทั้งหมดตรงกัน
04 ก.ค. 20:03:01 เซิร์ฟเวอร์ acpid[1179]: เหตุการณ์เลเยอร์อินพุตเสร็จสมบูรณ์ "ปุ่ม/ฝาปิด LID ปิด"
...

ข้อผิดพลาด: การดำเนินการออกโดยมีสถานะ 1 (ไม่ใช่ 0)

ถ้าฉันรู้ถูกต้อง รหัสทางออก 1 เป็นปัญหาการอนุญาต (ไม่อนุญาตให้ดำเนินการ) ฉันไม่รู้ว่าทำไมถึง "ไม่อนุญาต" เพราะฉันไม่จำเป็นต้องใช้ ซูโด เพื่อเรียกใช้สคริปต์นี้

hr flag
คุณมีแหล่งข้อมูลที่ระบุว่าสิ่งนี้ควรเป็นไปได้โดยใช้ `setterm' จากการกระทำที่ฉุนเฉียวหรือไม่? ความเข้าใจของฉันคือต้องเรียกใช้ `setterm` ภายในเทอร์มินัล ฉันสงสัยว่าสถานะทางออก 1 จริง ๆ แล้ว `setterm` บอกคุณว่าไม่ได้เชื่อมต่อกับเทอร์มินัล (หรือไม่รู้จักประเภทเทอร์มินัล) แทนที่จะเป็นข้อผิดพลาด EPERM หรือไม่
Score:0
ธง cn

ในที่สุดฉันก็รู้ว่าอะไรคือปัญหา

ตามที่ Steeldriver กล่าวไว้ setterm ต้องทำงานภายในเทอร์มินัล (หน้าแล็ปท็อป) และในสคริปต์ของฉันมันไม่ได้เชื่อมต่อกับเทอร์มินัลจริงและ setterm ไม่สามารถเปลี่ยนแปลงอะไรได้

ตาม นี้ โพสต์ เราจำเป็นต้องเปลี่ยนเส้นทางเอาต์พุตหรืออินพุตไปยัง/จากคอนโซล

ดังนั้นฉันจึงแก้ไขสคริปต์ของฉัน:

#!/bin/sh

grep -q ปิด /proc/acpi/button/lid/LID/state
ถ้า [ $? = 0 ]
แล้ว
    #ปิดกิจกรรม
    setterm -term ลินุกซ์ --blank แรง </dev/tty1
อื่น
    #เปิดดำเนินการ
    setterm -term ลินุกซ์ --blank โผล่ </dev/tty1
ไฟ

ฉันทดสอบสคริปต์นี้และใช้งานได้ดี ;)

โพสต์คำตอบ

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