ฉันจะเปลี่ยนแปลง / proc / acpi / wakeup อย่างถาวรได้อย่างไร


17

ฉันมีปัญหากับ Ubuntu 12.04 ของฉันที่จะตื่นขึ้นทันทีหลังจากหยุดพัก ฉันแก้ปัญหาด้วยการเปลี่ยนการตั้งค่าใน / proc / acpi / wakeup ตามที่แนะนำในคำถามนี้: ฉันจะป้องกันไม่ให้ตื่นขึ้นมาทันทีจากการหยุดชั่วคราวและ / หรือไฮเบอร์เนตได้อย่างไร .

หลังจากเปลี่ยนการตั้งค่าระบบจะเข้าสู่การหยุดพักชั่วคราวและพักการใช้งานอย่างต่อเนื่อง แต่หลังจากฉันตื่นขึ้นมาการตั้งค่าใน / proc / acpi / wakeup นั้นแตกต่างจากที่ฉันตั้งไว้

ก่อนจะระงับ:

cat /proc/acpi/wakeup
Device  S-state   Status   Sysfs node
SMB0      S4    *disabled  pci:0000:00:03.2
PBB0      S4    *disabled  pci:0000:00:09.0
HDAC      S4    *disabled  pci:0000:00:08.0
XVR0      S4    *disabled  pci:0000:00:0c.0
XVR1      S4    *disabled  
P0P5      S4    *disabled  
P0P6      S4    *disabled  pci:0000:00:15.0
GLAN      S4    *enabled   pci:0000:03:00.0
P0P7      S4    *disabled  pci:0000:00:16.0
P0P8      S4    *disabled  
P0P9      S4    *disabled  
USB0      S3    *disabled  pci:0000:00:04.0
USB2      S3    *disabled  pci:0000:00:04.1
US15      S3    *disabled  pci:0000:00:06.0
US12      S3    *disabled  pci:0000:00:06.1
PWRB      S4    *enabled   
SLPB      S4    *enabled

ฉันบอกให้ระบบหยุดทำงานชั่วคราวและทำงานได้ตามปกติ แต่ในภายหลังหลังจากตื่นขึ้นมาการตั้งค่าจะเปลี่ยนเป็น:

USB0      S3    *disabled  pci:0000:00:04.0
USB2      S3    *enabled   pci:0000:00:04.1
US15      S3    *disabled  pci:0000:00:06.0
US12      S3    *enabled   pci:0000:00:06.1

หรือ

USB0      S3    *enabled   pci:0000:00:04.0
USB2      S3    *enabled   pci:0000:00:04.1
US15      S3    *enabled   pci:0000:00:06.0
US12      S3    *enabled   pci:0000:00:06.1

ความคิดใด ๆ


ขอขอบคุณสำหรับการตอบสนองของคุณ. น่าเสียดายที่มันไม่ได้แก้ปัญหาของฉัน

ทั้งหมดของ

/sys/bus/usb/devices/usb1/power/wakeup
/sys/bus/usb/devices/usb2/power/wakeup
/sys/bus/usb/devices/usb3/power/wakeup
/sys/bus/usb/devices/usb4/power/wakeup

เช่นกัน

/sys/bus/usb/devices/3-1/power/wakeup

ถูกตั้งค่าเป็นปิดการใช้งานและโน้ตบุ๊คยังคงตื่นขึ้นมาทันทีหลังจากเข้านอน สิ่งเดียวที่ดูเหมือนว่าจะตอบสนองคือการตั้งค่าใน / proc / acpi / wakeup ซึ่งเปลี่ยนแปลงอยู่ตลอดเวลา (รีเซ็ต) ทุกครั้งที่ฉันปิด / รีสตาร์ทโน้ตบุ๊คของฉัน

คำตอบ:


11

ฉันพบปัญหานี้อีกครั้งบน Ubuntu 12.10 คำแนะนำจากผู้ใช้ MTS น่าเสียดายที่ไม่ได้ผลสำหรับฉัน อย่างไรก็ตามคุณสามารถเขียนสคริปต์เพื่อตั้งค่าคุณสมบัติ usb ให้ถูกต้องโดยอัตโนมัติ/proc/acpi/wakeupก่อนการระงับทุกครั้ง

การแก้ปัญหานั้นขึ้นอยู่กับการสร้างฮุกระงับ (อ้างอิงจากบทความ Archwiki นี้ ) บันทึกสิ่งต่อไปนี้เป็น/usr/lib/pm-utils/sleep.d/45fixusbwakeupและตรวจสอบให้แน่ใจว่าสามารถเรียกใช้งานได้ ( chmod +x /usr/lib/pm-utils/sleep.d/45fixusbwakeup)

#!/bin/bash
case $1 in
    hibernate)
            echo "Going to suspend to disk!"
            ;;
    suspend)
            echo "Fixing acpi settings."
            for usb in `cat /proc/acpi/wakeup | grep USB | cut -f1`;
            do
                    state=`cat /proc/acpi/wakeup | grep $usb | cut -f3 | cut -d' ' -f1 | tr -d '*'`
                    echo "device = $usb, state = $state"
                    if [ "$state" == "enabled" ]
                    then
                            echo $usb > /proc/acpi/wakeup
                    fi
            done
            echo "Suspending to RAM."
            ;;
    thaw)
            echo "Suspend to disk is now over!"
            ;;
    resume)
            echo "We are now resuming."
            ;;
    *)
            echo "Somebody is callin me totally wrong."
            ;;
esac

สิ่งนี้จะเปลี่ยนสถานะของอุปกรณ์ USB ทุกตัวที่เปิดใช้งานเพื่อปิดการใช้งานในปัจจุบัน หากคุณต้องการเปลี่ยนเฉพาะอุปกรณ์ USB ให้เปลี่ยน for loop ในสคริปต์ ตัวอย่างเช่นเปลี่ยนเฉพาะ USB1 และ USB3 เท่านั้น

for usb in `cat /proc/acpi/wakeup | grep USB | cut -f1`;

ถึง

for usb in 'USB1' 'USB3';

หวังว่านี่จะช่วยคนอื่นที่มีปัญหาเดียวกัน วิธีนี้แก้ไขปัญหาให้ฉันได้


1
ขอบคุณ! ฉันแก้ไขสคริปต์นี้เพื่อปิดการใช้งาน wakup จากอุปกรณ์ USB บนแล็ปท็อป Sony Vaio ของฉัน: gist.github.com/rutsky/1ed8e9779f0b2941c5a6
Vladimir Rutsky

ฉันปรับเปลี่ยนสคริปต์ของคุณเพื่อปิดใช้งานการปลุกเมื่อเปิด LID (จริงๆโง่และน่ารำคาญคุณลักษณะจากมุมมองของฉัน) ขอขอบคุณ!
gumkins

เบ็ดที่มีประโยชน์พิเศษนี้ใช้งานได้ใน Ubuntu และ Kubuntu แต่ไม่ใช่ใน Xubuntu 15.04 ฉันสงสัยว่าทำไม ... :(
Reloader

1
นี่คือสคริปต์ที่แก้ไขจาก Vladimir Rutsky สำหรับ systemd sleep hook แทน pm-utils: gist.github.com/kepi/9dea7aee8a59f3e7c10a
Kepi

1
หากสิ่งนี้สามารถอัปเดตสำหรับ Ubuntu 16.04 ได้มันก็เยี่ยมมาก ฉันใช้วิธีแก้ปัญหาจากที่นี่: askubuntu.com/a/620555/463546 (โซลูชันที่เก่ากว่า) แต่มันก็ค่อนข้างยุ่งยากโดยรวม
Aleksandr Dubinsky

9

บางทีhttp://forum.xbmc.org/showthread.php?tid=121158อาจช่วยได้

นี่คือสิ่งที่มันบอกว่า:

สำหรับผู้ที่อัปเดตเป็นเคอร์เนล 3.2 (ซึ่งควรเป็นทุกคนเนื่องจากการใช้ประโยชน์จากรูทล่าสุด) คุณจะสังเกตว่าการปลุก USB ของคุณอาจจะเสีย พวกเขาเปลี่ยนนโยบายการปลุกเริ่มต้น ( http://www.spinics.net/lists/linux-usb/msg53661.html ) ดังนั้นคุณจะต้องทำการเปลี่ยนแปลงสองอย่าง:

  • คุณไม่จำเป็นต้องเปิดใช้งานการปลุกอีกต่อไป/proc/acpi/wakeupแต่จะเปิดใช้งานตามค่าเริ่มต้น
  • คุณต้องเปิดใช้งานการปลุกสำหรับฮับ USB เพิ่มเติมจากอุปกรณ์ใน /sys/bus/usb/devices/*/power/wakeup

ดังนั้นนี่

echo USB1 > /proc/acpi/wakeup
echo enabled > /sys/bus/usb/devices/3-1/power/wakeup

กลายเป็น:

echo enabled > /sys/bus/usb/devices/usb3/power/wakeup
echo enabled > /sys/bus/usb/devices/3-1/power/wakeup

หวังว่านี่จะช่วยผู้อื่นจากการแก้ไขปัญหาเดียวกัน


2

สำหรับ Ubuntu 15+ คุณต้องใช้แทนsystemd rc.localคุณอาจ google "สร้างบริการ systemd" และทำตามคำแนะนำ แต่โปรดทราบว่าการเปลี่ยนเส้นทางผลลัพธ์ไปที่/proc/acpi/wakeupนั้นยุ่งยาก หากต้องการให้มันทำงานอย่างถูกต้องคุณต้องทำสิ่งต่อไปนี้

/bin/sh -c '/bin/echo XHC > /proc/acpi/wakeup'

ตัวอย่างเอาต์พุตสำหรับไฟล์เซอร์วิส (เช่น, /etc/systemd/system/suspendfix.service):

[Unit]
Description=fix to prevent system from waking immediately after suspend

[Service]
ExecStart=/bin/sh -c '/bin/echo XHC > /proc/acpi/wakeup'
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

หรือที่นี่ในส่วนสำคัญนี้

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