web-dev-qa-db-ja.com

KVMスイッチを使用しているときにキーを押してサスペンドされたラップトップをウェイクアップする方法は?

KVMスイッチに接続されたLogitech Unifying ReceiverでワイヤレスLogitechキーボードを使用しています。 Lenovo IdeaPadというラップトップをサスペンドするsystemdサスペンドショートカットを作成しました。ラップトップの蓋は常に閉じています。ラップトップの蓋を持ち上げない限り、Lenovoをサスペンドから復帰させることはできません。ふたを持ち上げると、ラップトップが起動します。蓋を持ち上げずにラップトップを起動できるようにしたい。これを行う方法がわかりません。

私は2つのことを試しましたが、どちらもうまくいきませんでした。最初に、Logitech Unifying Receiverのウェイクアップファイル(proc/acpi/wakeup)を有効にしました。キーボードを使用すると、実際にラップトップが起動しました。問題は、ラップトップが私からの入力なしで約5分以内に目が覚めたことです。キーボードなどからのアクティビティはありません。次に、 ワイヤレスUSBキーボードを使用してUbuntu 13.10をサスペンドから復帰させるにはどうすればよいですか? で説明した修正を試しました。

Lsinputを使用してデバイスを見ると、Logitechキーボードが見えます。物理アドレスusb-0000:00:14.0-3.1.1:1が与えられています。 proc/acpi/wakeupを見ると、pci:0000:00:14.0が表示されています。 3.1.1拡張子はありません。 /sys/bus/usb/devices/1-3.1.1を見ると、Logitech Unifying Receiverであることがわかります。

ウェイクイベント中のcat syslogの結果は次のとおりです。 syslog of laptop waking up

これらすべてを組み合わせてキーボード入力でウェイクアップし、他のウェイクイベントを抑制するにはどうすればよいですか?

数日後、私はこれを発見しました-「組み込みコントローラーとの対話これは、診断が非常に難しい問題が発生する場所です。組み込みコントローラー(EC)には、周辺機器を制御する独自のコードが含まれています。」 From https://wiki.ubuntu.com/Kernel/Reference/ACPITricksAndTips

これで十分だと思いますが、これはかなり難しく見え、私のLenovoに固有のものである可能性があります。

3
KCinAZ

From: サスペンドからのUSB IRリモートウェイクアップ

同じ問題が発生し、USBが/ proc/acpi/wakeupに表示されないことに困惑しました。しかし、最終的には、これが必要であると示唆する多くのソリューションにもかかわらず、ACPIでUSBを有効にする必要はありませんでした。

代わりに、IRデバイスが接続されたUSBポートでウェイクアップを有効にするだけで十分でした。

デバイスIDを見つけます:

$ lsusb

バス002デバイス002:ID 8087:8001 Intel Corp.
Bus 002 Device 001:ID 1d6b:0002 Linux Foundation 2.0ルートハブ
Bus 001 Device 002:ID 8087:8009 Intel Corp.
Bus 001 Device 001:ID 1d6b:0002 Linux Foundation 2.0ルートハブ
Bus 004 Device 001:ID 1d6b:0003 Linux Foundation 3.0ルートハブ
Bus 003 Device 003:ID 13ba:0018 PCPlay Barcode PCP-BCG4209
Bus 003 Device 002:ID 1934:5168 Feature Integration Technology Inc.(Fintek)F71610A or F71612A Consumer Infrared Receiver/Transceiver
Bus 003 Device 001:ID 1d6b:0002 Linux Foundation 2.0ルートハブ

上記の例では、デバイスIDは5168です。

Grep/sys/bus/usbを使用して、デバイスが接続されているポートを見つけます。

$ grep 5168 /sys/bus/usb/devices/*/idProduct  

/ sys/bus/usb/devices/3-13/idProduct:5168

これは、デバイスがbus3、ポート13に接続されていることを示しています。

ポートが正しいことを確認します。

$lsusb -t

/:バス04.ポート1:開発1、クラス= root_hub、ドライバー= xhci_hcd/6p、5000M
/:バス03.ポート1:開発1、クラス= root_hub、ドライバー= xhci_hcd/14p、480M
| __ポート13:Dev 2、0の場合、Class = Vendor Specific Class、Driver = mceusb、12M

| __ポート14:Dev 3、0の場合、Class = Human Interface Device、Driver = usbhid、1.5M
| __ポート14:Dev 3、1の場合、Class = Human Interface Device、Driver = usbhid、1.5M
/:バス02.Port 1:Dev 1、Class = root_hub、Driver = ehci-pci/2p、480M | __ Port 1:Dev 2、If 0、Class = Hub、Driver = hub/8p、 480M
/:バス01.ポート1:Dev 1、Class = root_hub、Driver = ehci-pci/2p、480M
| __ポート1:開発2、0の場合、クラス=ハブ、ドライバー=ハブ/ 6p、480M

バス3、ポート13は、grep(3-13)によって返されたバス/ポートと一致します。

ウェイクアップが有効になっているかどうかを確認します。

$ cat /sys/bus/usb/devices/3-13/power/wakeup  

障害者

ポートでウェイクアップを有効にします。

$ Sudo sh -c 'echo "enabled" > /sys/bus/usb/devices/3-13/power/wakeup'

ウェイクアップが有効かどうかを確認します。

$ cat /sys/bus/usb/devices/3-13/power/wakeup  

有効化

デバイスをテストしますが、システムを起動しますか?

この変更を再起動後も持続させる:

$ Sudo nano /etc/rc.local

コメントの後、「exit 0」の前に次の行を追加します

# Enable Wake on IR for USB bus 3 port 13.  
echo enabled > /sys/bus/usb/devices/3-13/power/wakeup

USBデバイスからPCを正常に起動します。

制限事項
このアプローチの問題の1つは、USBポートがIRデバイスのプラグに接続されている場合、そのポートを有効にしても特に効果がないことです。

この投稿 には、Udevルールを使用してプラグインされたデバイスに基づいて、IRポートを有効にする方法があります。

参考文献
Kodi、MCE Remote、Ubunt
キーボードまたはマウスによるサスペンドからの復帰
devルールによるIRデバイスの有効化


以下の元の回答

この質問には3つの答えがあります: ワイヤレスUSBキーボードまたはマウスを使用したサスペンドからの復帰(Linux Distroの場合)


回答1(15回のアップ投票)

ターミナルでヒット:

grep . /sys/bus/usb/devices/*/power/wakeup

その結果、私にとっては、すべてのUSBが無効になっていることがわかりました。だから今、入力:

1。

Sudo su

これでルート特権があります。

2. 8つのUSBポートを持っています(あなたが持っているUSBポートの数だけそれを行います)、そう:

echo enabled > /sys/bus/usb/devices/usb1/power/wakeup
echo enabled > /sys/bus/usb/devices/usb2/power/wakeup
echo enabled > /sys/bus/usb/devices/usb3/power/wakeup
echo enabled > /sys/bus/usb/devices/usb4/power/wakeup
echo enabled > /sys/bus/usb/devices/usb5/power/wakeup
echo enabled > /sys/bus/usb/devices/usb6/power/wakeup
echo enabled > /sys/bus/usb/devices/usb7/power/wakeup
echo enabled > /sys/bus/usb/devices/usb8/power/wakeup

さあ、それをテストしてください。これで、ワイヤレスまたは有線のUSBキーボードとマウスから起動できます。

そのため、すべてを有効にする必要がある理由は、次のステップで、これをrc.localに記述して、再起動するたびにコマンドを実行し、再起動後に一部のLinuxディストリビューション(すべて)でusbポートを変更するためです。 Linuxがサスペンドまたはハイバネーション状態にあるため、すべてを有効にすることで問題が発生しても心配する必要はありません。wifiを使用して何かをダウンロードすることはできません。わざと目を覚まさずに目を覚まします。

次のステップ:

3。

Sudo nano /etc/rc.local

そしてそこにステップ2のすべてを貼り付けます(もちろん出口0の前)。

それでおしまい。これからは、ワイヤレスUSBとマウスを使用して、サスペンドから復帰できます。

皆さんの役に立つことを願っています。このガイドは、インターネット上で可能な他のすべてのソリューションをテストした後に作成されました。


回答2(7回の投票)

上記のガイドに加えて、この情報を追加したいと思います。最近、スリープから復帰した後にワイヤレスusbデバイスが無効に戻ったことを発見したためです。繰り返しますが、すべてではなく、一部のUSBデバイスがそれを行います。そのため、この小さなガイドをガイドに追加しませんでした。

上記の指示どおりに実行すると、PCは正常に起動しますが、その日のうちに突然起動することはありません。

解決:

ターミナルを開いて実行します:

lsusb

キーボードデバイスID情報では、最初の4桁がベンダーIDで、次の4桁が製品IDです(スクリーンショットを参照) enter image description here

次は:

Sudo nano /etc/udev/rules.d/10-wakeup.rules

「ウェイクアップ」には、希望するスクリプト名を入力します。番号10は、他の多くのudevルールがある場合の優先順位です。番号が小さいほど、「ルール」は他のルールよりも先に実行されます。

これをコピーして貼り付け、ベンダーIDと製品IDを独自のワイヤレスキーボードベンダーIDと製品IDに置き換えます。

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="062a", ATTRS{idProduct}=="4101" RUN+="/bin/sh -c 'echo enabled > /sys/bus/usb/devices/usb8/power/wakeup'"

* usb8は私のワイヤレスキーボードです(スクリーンショット(Bus 008)でも確認できます)。

Ctrl + O 保存する 、 Ctrl + X 終了して再起動します。


回答3

Pavlos Theodorouの答えは非常に役立ちます。追加したいのは、起動時にマウス/キーボードがパイピングで接続されているUSBデバイスを見つけることができることですdmesg through grepegrep一度、最後にtailを使用して、最新のエントリであることを確認します。

この方法を使用すると、do n't wake onALLusbポートを有効にする必要があります。

/etc/rc.localファイルに以下を追加すると、USBポートから別のポートに移動しても、毎回Logitechレシーバーが検出されます。 「Logitech K270」の代わりに、dmesgのyourキーボードまたはマウスの名前に置き換えるだけです。

KB="$(dmesg | grep "Logitech K270 as" | grep -o -P "usb.{0,5}" | egrep -o ".{0,3}$" | tail -1)"
echo enabled > /sys/bus/usb/devices/${KB}/power/wakeup

これはブート時に機能しますが、サスペンドからの復帰時に実行されないようです。そのため、スクリプトファイルを/ lib/systemd/system-sleep /に配置する必要がありました。それを作成し、グローバルに実行可能として設定し、00から99の間の2桁の数字で始まる名前を付けます。私のスクリプトは次のようになります。再びyourdmesgのキーボード/マウスの言葉:

#!/bin/sh

# Action script to enable wake after suspend by keyboard or mouse

if [ $1 = post ]
    then
    KB="$(dmesg | grep "Logitech K270 as" | grep -o -P "usb.{0,5}" | egrep -o ".{0,3}$" | tail -1)"
    echo enabled > /sys/bus/usb/devices/${KB}/power/wakeup
fi

if [ $1 = pre ]
    then
    KB="$(dmesg | grep "Logitech K270 as" | grep -o -P "usb.{0,5}" | egrep -o ".{0,3}$" | tail -1)"
    echo enabled > /sys/bus/usb/devices/${KB}/power/wakeup
fi

何らかの理由で説明できませんが、 'post' sleep ifステートメントは他のすべてのウェイクアップでのみ機能します...しかし、 'pre' sleep ifステートメントは毎回働く。

1