ฉันมีการ์ดกราฟิก 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 ในแล็ปท็อปหลายรุ่นดูว่าคำสั่งที่ใช้มีอาจถูกแทนที่ด้วยสิ่งที่คุณแนะนำ นอกจากนี้ในการกู้คืนไฟล์ต้นฉบับคุณมักจะติดตั้งแพคเกจที่เป็นเจ้าของ