Score:0

วิธีทำให้ plymouth แสดงข้อความระหว่างการปิดเครื่อง, สลับโหมด และทำให้ pkcon ทำงานได้

ธง in

ฉันกำลังพยายามเขียนสคริปต์ที่ทำให้ a) อัปเดตระบบก่อนปิดเครื่อง (ไม่ใช่ตอนรีบูต) และแสดงความคืบหน้าให้ผู้ใช้ทราบบน plymouth

จนถึงตอนนี้ฉันสามารถทำให้มันเริ่มสคริปต์ (บางครั้ง?) เมื่อปิดเครื่อง แต่มันก็เริ่มด้วยการรีบูต (เพื่อแก้ไข)

[หน่วย]
คำอธิบาย=อัปเดตเมื่อปิดเครื่อง
ก่อน = poweroff.target halt.target shutdown.target
After=network-online.target หลาย user.target

[บริการ]
Type=วันช็อต
ExecStart=/bin/true
RemainAfterExit=จริง
ExecStop=/usr/share/services/shutdown_update
TimeoutSec=อินฟินิตี้

[ติดตั้ง]
WantedBy=poweroff.target halt.target shutdown.target

สคริปต์จริงคืออันนี้:

#!/bin/sh

fun_update() {

    พลีมัธ display-message --text "Aktualisierungen werden installiert..."
    โหมดเปลี่ยนพลีมัธ -- อัปเดต
    อัปเดต pkcon -p -y > /tmp/update_status.txt
    อัพเดท=0
    พลีมัธเปลี่ยนโหมด --boot-up
    plymouth display-message -- ข้อความ "Aufräumen..."
    apt-get ทำความสะอาดอัตโนมัติ
    apt-รับการลบอัตโนมัติ
    พลีมัธเปลี่ยนโหมด -- ปิดเครื่อง
}

fun_plymouth() {
    ในขณะที่ [ "$update" = 1 ]
    ทำ
        การอัปเดตระบบพลีมั ธ -- ความคืบหน้า $(cat /tmp/update_status.txt | grep -oP "(?<=เปอร์เซ็นต์: ).*" | หาง -1)
        plymouth display-message --text "$(cat /tmp/update_status.txt | grep -oP "(?<=Percentage: ).*" | tail -1)%"
        นอน1
    เสร็จแล้ว
}
ถ้า echo systemctl รายการงาน | egrep -q 'reboot.target.*start';
แล้ว
ทางออก 0
ไฟ
พลีมัธเปลี่ยนโหมด --boot-up
อัพเดท=0
plymouth display-message --text 'Aktualisierung wird vorbereitet...'
plymouth display-message --text "Es wird nach Aktualisierungen gesucht..."
pkcon รีเฟรช
update_list=$(pkcon รับ-updates)
สะท้อน $update_list
ถ้า ! echo "$update_list" | grep -q "ไม่มีการอัพเดตใดๆ ในขณะนี้"; แล้ว
อัพเดท=1
fun_update & fun_plymouth & รอสักครู่
อื่น
plymouth display-message --text "Keine Aktualisierungen gefunden!"
นอน 3
ไฟ
พลีมัธแสดงข้อความ --text ""

ฟังก์ชั่นเหล่านี้ทำอะไร (หรือสิ่งที่ฉันต้องการให้ทำ) คือ a) แจ้งผู้ใช้ว่าระบบของเขากำลังจะได้รับการอัปเดต b) เริ่มการอัปเดตโดยใช้ pkcon และ c) แสดง plymouth offline update splash (สแปลชที่เป็น แสดงเมื่อมีการติดตั้งการอัปเดตแบบออฟไลน์) และรับความคืบหน้าของ pkcon เพื่อแสดงให้ผู้ใช้เห็น (นั่นเป็นสาเหตุที่ grep และ tail -1 เพื่อรับการจับคู่ล่าสุดเท่านั้น)

แต่ด้วยเหตุผลบางอย่าง ฉันจัดการเพื่อเริ่มสคริปต์ แต่ไม่มีข้อความ plymouth ปรากฏขึ้นและ pkcon ไม่เริ่มทำงาน หรือเมื่อเกิดขึ้น แสดงว่าล้มเหลว อาจมีปัญหามากมายในสคริปต์นี้ ฉันไม่สามารถแก้ไขจุดบกพร่องได้ เนื่องจาก plymouth และ systemd ไม่มีประโยชน์จริงๆ

ยินดีรับทุกคำแนะนำ! ขอบคุณมาก ๆ!

แก้ไข: ฉันติดตั้ง plymouth-x11 เพื่อทดสอบสคริปต์ของฉัน น่าสนใจ คำสั่งที่ส่งโดยสคริปต์จะถูกละเว้นที่นี่เช่นกันเมื่อรัน (แม้ในรูทเชลล์) แต่คำสั่งที่แน่นอนเหล่านี้ป้อนด้วยตนเองในรูทเชลล์จะทำงานได้ ฉันยังเพิ่มบรรทัดนี้เพื่อตรวจสอบว่า plymouth กำลังทำงานอยู่หรือไม่:

พลีมัธ --ping && echo พลีมัธกำลังทำงาน || echo plymouth ไม่ทำงาน

และมันกลับมามันกำลังทำงานอยู่ สิ่งนี้ไม่สมเหตุสมผล

แก้ไข 2: ด้วย plymouth-x11 ฉันพบว่าการลบ (การลบบรรทัดของ) ฟังก์ชัน update() และ plymouth() ทำให้ plymouth แสดงข้อความการเพิ่มฟังก์ชันอีกครั้งจะทำให้มันหยุดทำงานอีกครั้ง นอกจากนี้ การวางคำสั่ง plymouth ไว้เหนือการประกาศฟังก์ชัน ทำให้คำสั่งทำงานอีกครั้ง

แก้ไข 3: ฉันลบฟังก์ชั่นและวางรหัสในไฟล์พิเศษ ตอนนี้ทำงานได้ตามที่คาดไว้ (อย่างน้อยในสภาพแวดล้อมการทดสอบของฉัน) คำถามคือ: ทำไมสคริปต์ของฉันถึงหยุดเมื่อฉันเพิ่มฟังก์ชัน

แก้ไข 4: อย่าตั้งชื่อฟังก์ชั่นของคุณเหมือนคำสั่งที่คุณต้องการเรียก -_-

แก้ไข 5: ดังนั้นสคริปต์ไม่ควรทำอะไรอีกต่อไปเมื่อฉันรีบูต แต่ยังคง: plymouth ไม่แสดงข้อความใด ๆ และดูเหมือนว่าสคริปต์จะไม่ถูกเรียกเมื่อปิดเครื่อง นี่คือปัญหาที่ฉันรู้ในตอนนี้ การทดสอบสคริปต์ที่ไม่ได้เรียกใช้นั้นค่อนข้างยาก สคริปต์ทำงานเมื่อฉันเริ่ม plymouthd ด้วยตนเองด้วย plymouth-x11

ฉันใช้ Ubuntu 21.04

Tobi Peter avatar
in flag
@guiverc ใช่ คุณพูดถูก ฉันขอโทษ ฉันใช้ Ubuntu 21.04 ฉันแก้ไขคำถามของฉันเมื่อพบว่าการเพิ่มฟังก์ชันให้กับสคริปต์ทำให้คำสั่ง plymouth เสียหายด้วยเหตุผลบางประการ

โพสต์คำตอบ

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