ฉันมีการ์ดกราฟิก 2 อันบนแล็ปท็อปของฉัน หนึ่งคือ IGP และอีกอย่างไม่ต่อเนื่อง
ฉันได้เขียนเชลล์สคริปต์เพื่อปิดการ์ดกราฟิกแบบแยก
ฉันจะแปลงเป็นสคริปต์ systemd เพื่อรันตอนเริ่มต้นได้อย่างไร
ฉันมีการ์ดกราฟิก 2 อันบนแล็ปท็อปของฉัน หนึ่งคือ IGP และอีกอย่างไม่ต่อเนื่อง
ฉันได้เขียนเชลล์สคริปต์เพื่อปิดการ์ดกราฟิกแบบแยก
ฉันจะแปลงเป็นสคริปต์ systemd เพื่อรันตอนเริ่มต้นได้อย่างไร
คำตอบ:
มีสองวิธีหลักในการทำเช่นนั้น:
systemdบริการดังนั้นคุณต้องมีสองไฟล์: สคริปต์และ.serviceไฟล์ (ไฟล์การกำหนดค่าหน่วย)
ตรวจสอบให้แน่ใจสคริปต์ของคุณเป็นที่ปฏิบัติการและบรรทัดแรก (คนshebang ) #!/bin/shเป็น จากนั้นสร้าง.serviceไฟล์ใน/etc/systemd/system(ไฟล์ข้อความธรรมดาเรียกมันว่าvgaoff.service)
ตัวอย่างเช่น:
/usr/bin/vgaoff/etc/systemd/system/vgaoff.serviceตอนนี้แก้ไขไฟล์หน่วย เนื้อหาขึ้นอยู่กับการทำงานของสคริปต์ของคุณ:
ถ้าvgaoffเพียงแค่ปิด gpu เช่น:
exec blah-blah pwrOFF etc
ดังนั้นเนื้อหาของvgaoff.serviceควรเป็น:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff
[Install]
WantedBy=multi-user.target
หากvgaoffใช้เพื่อปิดการทำงานของ GPU และยังสามารถเปิดปิดได้เช่น:
start() {
exec blah-blah pwrOFF etc
}
stop() {
exec blah-blah pwrON etc
}
case $1 in
start|stop) "$1" ;;
esac
ดังนั้นเนื้อหาของvgaoff.serviceควรเป็น:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff start
ExecStop=/usr/bin/vgaoff stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
วิธีปิดเครื่อง:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
[Install]
WantedBy=multi-user.target
วิธีปิดและเปิด:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
ExecStop=/bin/sh -c "echo ON > /whatever/vga_pwr_gadget/switch"
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
เมื่อเสร็จแล้วกับไฟล์ให้เปิดใช้งานบริการ:
systemctl enable vgaoff.service
มันจะเริ่มโดยอัตโนมัติในการบูตครั้งต่อไป คุณสามารถเปิดใช้งานและเริ่มให้บริการได้ในครั้งเดียว
systemctl enable --now vgaoff.service
จากsystemd v.220(ในการตั้งค่ารุ่นเก่าคุณจะต้องเริ่มต้นด้วยตนเอง)
สำหรับรายละเอียดเพิ่มเติมดูsystemd.serviceหน้าคู่มือ
การแก้ไขปัญหา
เริ่มที่นี่:
จะดูบันทึกการsystemdบริการได้อย่างไร
systemdรหัสทางออกของบริการและคำอธิบายข้อมูลสถานะ
echo SOMETHING > /some/file(หรือคำสั่งอื่นใดตามความเป็นจริง) ควรทำความคุ้นเคยกับพื้นฐานของ CLI ก่อนที่จะพยายามเรียกใช้เนื้อหาบนระบบของพวกเขา นอกเหนือจากนั้น FYI อ่านวิธีปิด dGPU ในแล็ปท็อปหลายรุ่นดูว่าคำสั่งที่ใช้มีอาจถูกแทนที่ด้วยสิ่งที่คุณแนะนำ นอกจากนี้ในการกู้คืนไฟล์ต้นฉบับคุณมักจะติดตั้งแพคเกจที่เป็นเจ้าของ