Bagaimana cara mengubah pemetaan untuk tombol «PowerOff» pada keyboard?

15

Saya telah membeli laptop Asus ROG G551JM yang terbukti kompatibel dengan Ubuntu. Keyboard komputer dirancang dengan buruk dengan tombol "Poweroff" menjadi kunci biasa, ditempatkan di tempat, di mana orang biasanya menemukan kunci "Akhir". Komputer itu baik-baik saja kalau tidak, jadi saya membelinya dengan asumsi, bahwa saya akan entah bagaimana dapat "memperbaiki" masalah, yaitu memetakan kembali tombol PowerOff menjadi tombol "End".

Tombol PowerOff dibuat salah (ASUS G551JM): ASUS G551JM

Biasanya ada tombol «Akhir» (ASUS N56VZ): ASUS N56VZ

The "poweroff" tombol peristiwa yang diproduksi oleh /dev/input/event2: Power Buttonperangkat (seperti dilansir evtest) dengan kode 116 (contoh baris dari evtest: Event: time 1422895638.246142, type 1 (EV_KEY), code 116 (KEY_POWER), value 1)

Kuncinya juga dapat dilihat oleh server X, dan pada akhirnya Ubuntu dapat mengidentifikasi penekanan tombol sebagai PowerOffkunci dan meluncurkan kotak dialog semi-transparan "Goodbye user Adam ..." yang menegaskan keinginan saya untuk benar-benar mematikan komputer.

Masalahnya adalah bahwa pengikatan yang mengikat tombol PowerOff tekan dengan rutin yang menampilkan dialog konfirmasi yang tidak terlihat di bawah dconf-editor dan saya tidak punya petunjuk di mana menemukannya.

Adakah yang bisa memberitahu saya, di mana harus mengubah (atau menghapus) ikatan default untuk kunci PowerOff ???

Itu harus menjadi sesuatu yang mudah.


edit 21.IX.2016:

Ada cara untuk menonaktifkan kotak dialog secara permanen, lihat Bagaimana cara mengubah opsi untuk tombol daya? . Saya berharap bahwa setelah menonaktifkan tombol daya, akan mungkin untuk menetapkan ulang ke sesuatu yang lain.

Adam Ryczkowski
sumber
Sudahkah Anda memecahkan masalah? Akan sangat berguna jika Anda mengirim jawaban di sini.
Ezze
1
@Ezze Tidak juga (saya menggunakan komputer yang berbeda karena masalah ini). Tapi saya berhasil mematikan dialog shutdown yang dihasilkan setelah menekan tombol. OK, saya akan memperbarui jawabannya.
Adam Ryczkowski
Pertanyaan terkait tentang Unix & Linux StackExchange.
Ezze
2
Saya sangat membenci ASUS karena menghapus kunci itu. Homedan Endkunci "meta" yang paling sering saya gunakan ... :(
Matthieu

Jawaban:

10

Saya bisa membuatnya bekerja pada ASUS N751JK saya di Ubuntu 18.04 LTS dan Ubuntu 16.04 LTS (diuji dengan lingkungan desktop Unity dalam kedua kasus dan KDE Plasma di 18.04):

  1. Pertama-tama, atur aksi tombol "Matikan" menjadi nothing.

    Kesatuan

    Seperti disebutkan dalam jawaban Johano Fierra :

    gsettings set org.gnome.settings-daemon.plugins.power button-power "nothing"
    

    atau sebagai alternatif sudo apt install dconf-toolsdan gunakan dconf-editoruntuk mengubah org.gnome.settings-daemon.plugins.powerproperti (seperti dijelaskan di sini ). Reboot atau logout diperlukan untuk membuatnya berfungsi.

    KDE

    Buka "Pengaturan Sistem" , pilih tab "Manajemen Daya" di bagian "Perangkat Keras", lalu pilih tab "Hemat Energi" , gulir ke bawah, cari "Ketika tombol daya ditekan" daftar dropdown dan ubah nilainya menjadi "Jangan lakukan apa-apa" . Klik tombol "Terapkan" untuk perubahan agar berpengaruh.

    Hemat energi

  2. Instal xdotool :

    sudo apt install xdotool
    

    Yang ini akan memungkinkan kita untuk memicu acara utama.

  3. Langkah selanjutnya adalah memicu "End" tekan tombol on "Power off" tekan tombol.

    Ubuntu 18.04

    Buat /etc/acpi/events/powerfile dengan konten berikut:

    event=button/power
    action=/etc/acpi/power.sh "%e"
    

    dan buat /etc/acpi/power.shskrip dengan konten berikut:

    #!/bin/sh
    xdotool key End
    

    dan tambahkan izin eksekusi untuk itu:

    sudo chmod +x /etc/acpi/power.sh
    

    Ubuntu 16.04

    Skrip ACPI cadangan yang digunakan untuk menangani acara tombol "Matikan" :

    sudo cp /etc/acpi/powerbtn.sh /etc/acpi/powerbtn.sh.backup
    

    Kemudian edit, cari yang berikut:

    # If logind is running, it already handles power button presses; desktop
    # environments put inhibitors to logind if they want to handle the key
    # themselves.
    

    dan modifikasi kode di bawah sehingga terlihat seperti:

    if pidof systemd-logind >/dev/null; then
        xdotool key End
        exit 0
    fi
    
  4. Untuk menerapkan perubahan ini, seseorang harus menjalankan:

    sudo acpid restart
    

    Berkat Adam , mungkin untuk memulai ulang acpidsecara otomatis ketika pengguna masuk (saat boot sistem). Jadi alih-alih manual sudo acpid restartdi terminal setiap kali setelah reboot tambahkan baris berikut:

    session optional    pam_exec.so /usr/sbin/acpid restart
    

    ke akhir /etc/pam.d/common-sessionfile.

Ezze
sumber
Bagaimana dengan sudo acpid reloadbukannya restart? Apakah itu akan berhasil?
Byte Commander
1
Apa yang memecahkan acpid restartmasalah adalah menambahkan baris session optional pam_exec.so /usr/sbin/acpid restartdi akhir /etc/pam.d/common-session. Dengan cara ini acpid akan dimulai kembali setelah pengguna masuk dan ini cukup bagi saya. Akhirnya masalah terpecahkan !!
Adam Ryczkowski
1
@rtindru, Anda seharusnya gsettings setbukan gsettings get.
Ezze
1
Untuk membuat ini berfungsi di Kubuntu 18.04, saya harus memberikan izin eksekusi ke power.sh: sudo chmod +x /etc/acpi/power.sh@Ezze, mungkin Anda bisa memperbarui jawaban Anda untuk menyertakan ini.
LGenzelis
1
@LGenzelis, terima kasih. Diperbarui jawabannya.
Ezze
4

Ini harus melakukan trik.

Masukkan terminal:

gsettings set org.gnome.settings-daemon.plugins.power button-power "nothing"
Johano Fierra
sumber
2
IYA!!! Tetapi kemudian ada satu hal lagi: bagaimana cara memetakannya ke tombol «akhir»?
Adam Ryczkowski
1
Memasukkan wilayah yang belum dipetakan di sini, tapi saya pikir Anda bisa membuat konfigurasi file xmodmap ($ {HOME} /. Xmodmap) dan kemudian masukkan ini: keycode 116 = Akhir , atau masukkan terminal: xmodmap -e "keycode 116 = Akhir "
Johano Fierra
Sayangnya, itu tidak membantu. Ini menonaktifkan pengambilan tombol "Matikan" seperti yang terlihat oleh xevperintah dan mencegah xmodmapuntuk memetakannya kembali. Dan omong-omong, kode kunci tombol "Matikan" mungkin berbeda (124 untuk ASUS N751JK saya).
Ezze
Seharusnya tidak menonaktifkan kemampuan untuk menangkap tombol ... tetapi bagaimana dengan ini. Masukkan terminal: gsettings set org.gnome.settings-daemon.plugins.power button-power "shutdown"(sehingga menekan tombol ditangkap), kemudian edit /etc/acpi/events/powerbtndan komentar keluar dari jalur #action=/etc/acpi/powerbtn.sh, dan kemudian masukkan terminal: xmodmap -e "keycode 124 = End"Ini harus mencegah tombol daya dari melakukan apa pun dan pada saat yang sama memetakannya ke tombol Putus.
Johano Fierra
1
Itu tidak membantu juga karena acara "Matikan" ditangani tidak hanya oleh powerbtn.shskrip tetapi juga oleh (setidaknya) systemd-logindlayanan (mungkin, menggunakan button-powerpengaturan yang Anda sebutkan dalam jawaban Anda). Anda dapat menemukan if pidof systemd-logind >/dev/null; then... exit 0baris powerbtn.shyang artinya skrip memungkinkan systemd-loginduntuk menangani acara "Matikan" dengan sendirinya saat sesi desktop aktif. Satu hal yang benar tentang Anda - mengubah button-powernilai tidak memengaruhi kemampuan untuk menangkap kunci tetapi sudah ditangkap oleh beberapa proses ( systemd-logindatau lainnya).
Ezze