Bagaimana cara mematikan daya USB ke mouse saya, ketika saya menangguhkan notebook?


19

Lampu LED mouse saya membuat saya gelisah saat tidur. Saya biasanya menutup notebook saya di malam hari dan panggilan Ubuntu pm-suspend. Bagaimanapun, colokan USB masih disajikan dengan daya. Saya bahkan dapat mengisi daya ponsel cerdas saya. Ini buruk bagi saya karena dua alasan. Saya harus mencabut mouse saya dan paket baterai notebook [akku] bertahan lebih sedikit. Apakah ada cara untuk secara otomatis mematikan perangkat USB saya, atau semua perangkat USB, ketika notebook masuk ke mode tunda?

Bagaimana cara mengkonfigurasinya?

EDIT: Seperti yang diminta dalam komentar, saya menambahkan informasi ini: Saya menggunakan Lenovo G550.

EDIT: Seperti yang diminta di sini keluaran lsusb saya

Bus 002 Device 019: ID 1058:25a3 Western Digital Technologies, Inc. 
Bus 002 Device 017: ID 1b1a:7001  
Bus 002 Device 009: ID 2109:2812 VIA Labs, Inc. VL812 Hub
Bus 002 Device 008: ID 2109:2812 VIA Labs, Inc. VL812 Hub
Bus 002 Device 003: ID 0402:5608 ALi Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

EDIT: Saya pikir informasi ini juga mengarah ke jawabannya.

root@localhost:/sys/bus/usb/devices# ls -al
insgesamt 0
drwxr-xr-x 2 root root 0 Okt  6 10:56 .
drwxr-xr-x 4 root root 0 Okt  6 10:56 ..
lrwxrwxrwx 1 root root 0 Okt  6 10:56 1-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.7/usb1/1-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-3 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-3
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-3:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-3:1.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3:1.1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1.2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1.2
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1.2:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1.2/2-5.1.2:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1.2:1.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1.2/2-5.1.2:1.1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.2
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.2:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.2/2-5.2:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 3-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.0/usb3/3-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 4-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.1/usb4/4-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 5-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.2/usb5/5-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-1 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-1:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-1:1.1 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-1:1.2 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.2
lrwxrwxrwx 1 root root 0 Okt  6 10:56 7-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.1/usb7/7-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 8-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.2/usb8/8-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb1 -> ../../../devices/pci0000:00/0000:00:1a.7/usb1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb3 -> ../../../devices/pci0000:00/0000:00:1a.0/usb3
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb4 -> ../../../devices/pci0000:00/0000:00:1a.1/usb4
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb5 -> ../../../devices/pci0000:00/0000:00:1a.2/usb5
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb6 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb7 -> ../../../devices/pci0000:00/0000:00:1d.1/usb7
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb8 -> ../../../devices/pci0000:00/0000:00:1d.2/usb8

EDIT:

tokam@localhost:~$ lsusb -t
/:  Bus 08.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 07.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 1: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 1: Dev 2, If 2, Class=Human Interface Device, Driver=usbhid, 12M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
    |__ Port 3: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M
    |__ Port 3: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
    |__ Port 5: Dev 51, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 52, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 2: Dev 54, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
            |__ Port 2: Dev 54, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 2: Dev 53, If 0, Class=Mass Storage, Driver=usb-storage, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M

8
Saya tidak berpikir fitur biaya tidur ini ada hubungannya dengan Ubuntu. Windows dan Ubuntu melakukannya untuk saya di laptop saya. Sebagai gantinya, harus ada pengaturan di BIOS untuk mematikan daya ke port USB saat tidur.
TheWanderer

1
Apakah kamu yakin Google menunjukkan kepada saya beberapa informasi untuk kata kunci "usb suspend ubuntu". Tetapi saya belum 100% yakin bagaimana melakukannya dengan benar. hamwaves.com/usb.autosuspend/en askubuntu.com/questions/80638/…
tokam

1
Anda dapat menonaktifkannya, tetapi saat itulah Ubuntu sendiri sedang berjalan. Jika Anda ingin membuat skrip untuk dijalankan sebelum laptop tidur untuk menangguhkan porta, itu mungkin, tetapi akan lebih mudah untuk setidaknya memeriksa pengaturan BIOS Anda untuk opsi itu.
TheWanderer

1
Sayangnya BIOS saya tidak mendukung opsi seperti itu.
tokam

1
@tokam, bisakah Anda mengedit pertanyaan dan menambahkan merek dan model laptop? Juga dapatkah Anda mengonfirmasi bahwa itu bukan port berbagi daya USB seperti yang dijelaskan di sini: dell.com/support/article/ro/ro/robsdt1/SLN155147/EN (ikon petir)
user.dz

Jawaban:


4

Blok sandungan saat ini dengan tautan OP, tindak lanjut komentar dan jawaban yang diajukan adalah ID produk statis 1b1a:7001tetapi nomor Bus dan Perangkat terus berubah.

Solusinya

Buat skrip (nama apa pun yang Anda inginkan) di direktori /etc/pm/sleep.d/dan tempatkan yang berikut di dalamnya:

#!/bin/bash
ZeroBUS=$(lsusb | grep 1b1a:7001 | cut -c  5-7 )

# Strip leading zeros
BUS=$(echo $ZeroBUS | sed 's/^0*//')

# Build "usbX" usb number
USB=usb$BUS

case $1 in
     suspend|suspend_hybrid|hibernate)
     echo "Powering off: " $USB
        echo $USB | sudo tee /sys/bus/usb/drivers/usb/unbind
        ;;
     resume|thaw)
        # No need to do anything here, kernel unsuspends USB devices
        # Show how to power on for interest sake but since device is
        # powered off the usb number will be blank.
        echo "Powering on: " $USB
        echo $USB | sudo tee /sys/bus/usb/drivers/usb/bind
        ;;
esac

Tandai file sebagai executable dengan sudo chmod +x file_name"file_name" adalah nama yang Anda pilih.

Penjelasan

Solusi ini mematikan seluruh hub USB yang dalam kasus saya berarti telepon, mouse nirkabel, keyboard nirkabel, dll. Saat memanggil skrip dari terminal, kata sandi sudo perlu dimasukkan. Semoga ketika dipanggil dari systemd sudo kekuatan diwarisi. Saya tidak bisa menguji ini karena saya tidak punya mouse kabel. Oleh karena itu penyempurnaan tambahan mungkin diperlukan untuk kekuatan sudo.

Daya tidak terputus secara fisik ketika BIOS menyediakan catu daya 5V yang konstan, melainkan perangkat di bus disuruh mematikan sendiri. Dalam kasus saya, keyboard dan mouse nirkabel berhenti bekerja dan harus menggunakan keyboard laptop dan touchpad untuk menghidupkan kembali.

Anda dapat menguji ini secara manual dengan memanggil skrip dan melewati parameter "menangguhkan". Melewati parameter "resume" tidak menghasilkan apa-apa karena perangkat dimatikan dan tidak memiliki ID perangkat untuk menyalakannya kembali.


Solusi lebih mudah matikan semua port USB

Saya baru-baru ini mengalami masalah di mana port yang tidak dikenal mencegah laptop dari menangguhkan. Saya menemukan solusi ini (kredit dalam kode) yang saya modifikasi.

Buat file /lib/systemd/system-sleep/custom-xhci_hcdmenggunakan sudokekuatan dan masukkan kode ini:

#!/bin/bash

# Original script was using /bin/sh but shellcheck reporting warnings.

# NAME: custom-xhci_hcd
# PATH: /lib/systemd/system-sleep
# CALL: Called from SystemD automatically
# DESC: Suspend broken for USB3.0 as of Oct 25/2018 various kernels all at once

# DATE: Oct 28 2018.

# NOTE: From comment #61 at: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/522998

TMPLIST=/tmp/xhci-dev-list

# Original script was: case "${1}" in hibernate|suspend)

case $1/$2 in
  pre/*)
    echo "$0: Going to $2..."
    echo -n '' > $TMPLIST
          for i in `ls /sys/bus/pci/drivers/xhci_hcd/ | egrep '[0-9a-z]+\:[0-9a-z]+\:.*$'`; do
              # Unbind xhci_hcd for first device XXXX:XX:XX.X:
               echo -n "$i" | tee /sys/bus/pci/drivers/xhci_hcd/unbind
           echo "$i" >> $TMPLIST
          done
        ;;
  post/*)
    echo "$0: Waking up from $2..."
    for i in `cat $TMPLIST`; do
              # Bind xhci_hcd for first device XXXX:XX:XX.X:
              echo -n "$i" | tee /sys/bus/pci/drivers/xhci_hcd/bind
    done
    rm $TMPLIST
        ;;
esac

Bisakah saya menguji skripnya sebelum menangguhkan notebook dengan perintah gema yang tidak dinamis?
tokam

Anda berhasil mengisolasi bus dan perangkat yang juga ditampilkan dalam lsusb, tetapi ketika Anda menunjukkan direktori tidak ada, seperti yang ditunjukkan dalam pertanyaan, direktori memiliki struktur yang berbeda dari $ {BUS} - $ {DEVICE} , dan saya tidak yakin apakah dengan mengetahui yang mana yang benar, penangguhannya berfungsi
tokam

Tes di mana saya mencabut dan memasang kembali mouse membantu mengidentifikasi folder. Tetapi lihat output dari tes berikutnya: Keine Berechtigung berarti: tidak ada root izin @ localhost: ~ # echo menangguhkan> /sys/bus/usb/devices/2-5.1.2:1.1/power/level -bash: / sys /bus/usb/devices/2-5.1.2:1.1/power/level: Keine Berechtigung
tokam

Mouse memiliki LED di thouse luar dan laser di bagian bawah. Dengan kombinasi kedua jawaban yang diberikan, saya dapat mematikan laser mouse, tetapi bukan LED, yang menambahkan cahaya tidak pada lingkungan tidur saya. Mungkin kita tidak bisa mematikan LED oleh Kernel? Saya mengujinya pada USB Plug terisolasi untuk mouse.
tokam

@tokam Setelah banyak penelitian dan pengujian, saya akhirnya berhasil bekerja di sistem saya secara manual tetapi tidak memiliki mouse untuk mengujinya. Semoga berhasil!
WinEunuuchs2Unix

5

Temukan bus dan perangkat # mouse Anda dengan mengeluarkan perintah lsusb(dengan dan tanpa itu terpasang) Anda ingin yang ada di sana ketika dicolokkan. Catat angka-angkanya. Dalam kasus Anda mereka tampaknya 6 dan 6

mengeluarkan perintah sudo cp /etc/pm/sleep.d/novatel_3g_suspend /etc/pm/sleep.d/mouse_suspend(kita harus melakukan ini karena gedittidak lagi memiliki opsi Simpan Sebagai ketika diluncurkan sebagai superuser yang dapat saya temukan.)

mengeluarkan perintah gksu gedit /etc/pm/sleep.d/mouse_suspendUbah nomor Bus dan Perangkat agar cocok dengan yang Anda catat sebelumnya. Simpan file yang dihasilkan. Ini akan dieksekusi ketika Anda menangguhkan laptop Anda.

Dalam kasus Anda, Anda harus mengubah BUS = X dan DEVICE = Y ke nomor Bus dan Perangkat yang cocok dengan mouse yang dimaksud. Ini akan berfungsi sampai Anda memindahkan perangkat ke port lain di mana Anda harus menemukan perangkat lagi dan menyesuaikan file sesuai.

BUS=X
DEVICE=Y

if [ ! -x /sys/bus/usb/devices/${BUS}-${DEVICE}/power/level ]; then
    exit 0
fi

case $1 in
     suspend|suspend_hybrid|hibernate)
    echo suspend > /sys/bus/usb/devices/${BUS}-${DEVICE}/power/level
        ;;
     resume|thaw)
    # No need to do anything here, kernel unsuspends USB devices
    :
        ;;
esac

Komentar dalam file (baris yang dimulai dengan #) tidak relevan dan dapat diabaikan dengan aman.

Catatan: Saya menguji ini melalui Penangguhan di desktop dan itu berfungsi seperti yang diiklankan. Saya tidak memiliki akses ke perangkat keras yang sama dengan yang Anda miliki, tetapi saya harus melanjutkan sistem melalui tombol daya jadi saya cukup yakin ini akan bekerja untuk Anda.

Edit berdasarkan komentar dan perluasan pertanyaan:

Tampaknya ini adalah info yang Anda perlukan untuk melanjutkan: Bus 006 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver


Di geditUbuntu 16,04 upgrade vanilla saya dari 14,04 ada Save aspilihan di bawah Filemenu. Sesuatu pasti terjadi pada konfigurasi Anda ??? PS jawaban yang bagus, saya akan coba nanti.
WinEunuuchs2Unix

Saya punya file save juga, menggunakan Ubuntu Mate.
tokam

@ WinEunuuchs2Unix Menarik. Tampaknya tidak ada pada instalasi baru. Mungkin ini adalah dasar untuk pertanyaan baru ....
Penatua Geek

@ElderGeek Pembaruan tentang Save Asjika saya mengetik geditsaya mendapatkan seluruh menu baris atas "Edit File Lihat Bantuan Alat Bantu Dokumen" tetapi jika saya mengetik gksu geditdaftar menu tidak muncul. HTH.
WinEunuuchs2Unix

1
@tokam Dapatkah Anda memperbarui pertanyaan Anda dengan output dari lsusb -tdan lsusbdengan semua perangkat Anda terhubung seperti biasa Anda gunakan sehari-hari. Itu mungkin membantu kita memvisualisasikan hub dan apa yang tidak.
WinEunuuchs2Unix
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.