Bagaimana cara gamepad mengendalikan mouse?

9

Ada banyak pertanyaan tentang subjek ini:

Tetapi tujuan dari pertanyaan / jawaban ini adalah untuk dapat menggunakan gamepad untuk bermain game.

Saya ingin solusi untuk menggunakan gamepad untuk mengontrol mouse.
Untuk mengganti mouse dengan gamepad di semua aplikasi.
Dengan begitu saya bisa mengendalikan komputer saya di ruang tamu dari sofa saya dengan gamepad nirkabel.

Boris
sumber

Jawaban:

8

Mengikuti jawaban Grumbel , saya mencoba solusi xboxdrv dengan dukungan tautannya dan khususnya halaman ini :

1. Instal xboxdrv 0.8.2 dari Ubuntu Software Center.

Instal juga uinput dan joydev jika diperlukan. Saya melakukannya dengan cara ini sudo modprobe uinput+sudo modprobe joydev

2. Perlu tahu acara gamepad:

Luncurkan udevadm monitor --udevlalu tancapkan game pad:

$ udevadm monitor --udev
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing

UDEV  [6722.377700] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1 (usb)
UDEV  [6722.383264] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0 (usb)
UDEV  [6722.383333] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/0003:046D:C218.0003 (hid)
UDEV  [6722.383389] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/0003:046D:C218.0003/hidraw/hidraw1 (hidraw)
UDEV  [6722.387123] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/input/input10 (input)
UDEV  [6722.399284] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/input/input10/event8 (input)
UDEV  [6722.412128] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/input/input10/js0 (input)

Saya menyimpulkan bahwa acara gamepad saya adalah / dev / input / event8

3. Tampilkan nama setiap tombol, sumbu, tombol gamepad.

Idenya adalah untuk meluncurkan xboxdrvdan menguji setiap tombol dan mencatat hasilnya di atas kertas.

$ sudo xboxdrv --evdev /dev/input/event8 --evdev-debug
Your Xbox/Xbox360 controller should now be available as:
/dev/input/js1
/dev/input/event9
Press Ctrl-c to quit, use '--silent' to suppress the event output
EV_ABS ABS_X 128
EV_ABS ABS_Y 128
...

Dalam kasus saya hasilnya adalah: masukkan deskripsi gambar di sini

4. Atur file konfigurasi

Buat file xboxdrv-mouse.ini untuk mengatur sumbu XY dan tombol kiri dan kanan mouse.
Di sini saya mengatur tombol gamepad 2untuk tombol kiri mouse dan 3untuk tombol kanan mouse:

[xboxdrv]
evdev=/dev/input/event8
silent=true

[evdev-absmap]
ABS_X=x1
ABS_Y=y1

[ui-axismap]
x1=REL_X:10
y1=REL_Y:-10

[evdev-keymap]
BTN_THUMB=a
BTN_THUMB2=b

[ui-buttonmap]
a=BTN_LEFT
b=BTN_RIGHT

# EOF #

Perhatikan bahwa nilai untuk REl_X dan REL_Y tampaknya menentukan kecepatan mouse, dan dengan mendefinisikan nilai negatif itu membalik sumbu (lihat di sini untuk REL_Y)

Contoh lain dengan lebih banyak definisi tombol

[xboxdrv]
evdev=/dev/input/event8
silent=true

[evdev-absmap]
ABS_X=x1
ABS_Y=y1
ABS_HAT0X=x2
ABS_HAT0Y=y2

[ui-axismap]
x1=REL_X:10
y1=REL_Y:-10
x2=KEY_LEFT:KEY_RIGHT
y2=KEY_DOWN:KEY_UP

[evdev-keymap]
BTN_TRIGGER=x
BTN_TOP=y
BTN_THUMB=a
BTN_THUMB2=b
BTN_PINKIE=rt
BTN_BASE2=rb
BTN_TOP2=lt
BTN_BASE=lb
BTN_BASE3=back
BTN_BASE4=start

[ui-buttonmap]
x=KEY_KPENTER
y=KEY_SPACE
a=BTN_LEFT
b=BTN_RIGHT
rt=KEY_KP8
rb=KEY_KP2
lt=KEY_KP6
lb=KEY_KP4
back=KEY_LEFTSHIFT
start=KEY_RIGHTCTRL

# EOF #

5. Luncurkan

sudo xboxdrv --config xboxdrv-mouse.ini

Untuk menghindari peluncurannya sudo, buat aturan udev .

KESIMPULAN

Ini berfungsi dengan baik, itu solusi terbaik bagi saya.

Boris
sumber
apakah ini hanya berlaku untuk pengontrol XBOX?
Gman Smith
@manman tidak, saya menggunakannya untuk game pad Logitec
Boris
4

Belum teruji di ubuntu, tetapi resep sederhana itu berfungsi di Debian Jessie (dengan gamepad usb klasik iBuffalo saya ):

  1. Instal modul xorg yang tepat:

$ sudo apt install xserver-xorg-input-joystick

  1. Mulai ulang manajer tampilan Anda (atau reboot)
Jocelyn delalande
sumber
Ini bekerja dengan baik pada Raspbian Buster - Raspberry Pi 3 B +. 8bitdo gamepad dalam mode yang kompatibel xbox 360 dan gaya umum usb gamepad bekerja dengan baik. Terima kasih.
Thinklogically
3

xboxdrv harus dapat melakukan apa yang Anda inginkan. Namun membutuhkan sedikit konfigurasi untuk bekerja dengan gamepad non-Xbox, sesuatu di sepanjang baris (periksa halaman manual untuk detail, gunakan --evdev-debug untuk mengetahui tombol dan nama sumbu):

#!/bin/sh

xboxdrv \
  --evdev /dev/input/event9 \
  --evdev-absmap ABS_X=X1,ABS_Y=y1 \
  --evdev-absmap ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y \
  --evdev-keymap BTN_BASE=LB,BTN_BASE2=RB \
  --evdev-keymap BTN_BASE3=guide,BTN_TOP2=start,BTN_PINKIE=back \
  --evdev-keymap BTN_THUMB=x,BTN_TOP=a,BTN_THUMB2=b,BTN_TRIGGER=y \
  \
 --ui-clear \
  --ui-buttonmap rb=BTN_LEFT,lb=BTN_RIGHT,start=KEY_ESC,back=KEY_F1 \
  --ui-buttonmap a=KEY_SPACE \
  --ui-axismap X1=REL_X:20,Y1=REL_Y:20 \
  --ui-axismap DPAD_X=KEY_A:KEY_D:1,DPAD_Y=KEY_W:KEY_S:1 \
  -s "$@"

# EOF #
Grumbel
sumber
sulit, saya hanya mendapatkan "argumen tidak valid"
Boris
Sedikit informasi lebih lanjut akan membantu, bagaimana konfigurasi config Anda terlihat, seperti apa persisnya keluaran xboxdrv, versi mana yang Anda gunakan, dll. Juga yang di atas hanyalah contoh, Anda harus menyesuaikannya agar controller Anda memilikinya kerja.
Grumbel
terima kasih Grumbel! berusaha tidak menjadi malas, saya membaca doc dan akhirnya saya atur konfigurasi xboxdrv saya, saya merinci bagaimana dalam jawaban saya
Boris
2

Sama untuk gamepad Nintendo 64

[xboxdrv]
evdev=/dev/input/event9
silent=true

[evdev-absmap]
ABS_X=x1
ABS_Y=y1
ABS_RZ=x2
ABS_Z=y2
ABS_HAT0X=dpad_x
ABS_HAT0Y=dpad_y

[axismap]
-X2=X2

[ui-axismap]
x1=REL_X:30
y1=REL_Y:30
x2=KEY_Q:KEY_D
y2=KEY_DOWN:KEY_UP
dpad_x=KEY_LEFT:KEY_RIGHT
dpad_y=KEY_DOWN:KEY_UP

[evdev-keymap]
BTN_THUMB2=b
BTN_THUMB=a
BTN_BASE3=back
BTN_BASE4=start
BTN_BASE=lb
BTN_BASE2=rb

[ui-buttonmap]
start=KEY_KPENTER
rb=BTN_RIGHT
lb=void
a=REL_WHEEL:-1:150
b=REL_WHEEL:1:150
back=BTN_LEFT

Beberapa detail

Tujuan saya adalah untuk mengatur ini agar dapat dimainkan oleh game tembak orang pertama, karena saya tidak terbiasa bermain dengan mouse dan keyboard. Namun sebagian besar game di GNU / Linux tidak mendukung gamepad dengan sangat baik. Saya mencoba melakukan itu seperti mode gamepad canggih pada N64 Game 007 yang terkenal - GoldenEye.

Dengan cara ini, Anda juga dapat menggunakan gamepad untuk mengganti mouse Anda.

Pilihan saya

  • meniru mouse pada tongkat utama
  • tombol kuning C (x2 y2) diatur ke ATAS, BAWAH tombol keyboard, dan tombol pada papan tombol azerty untuk gerakan lateral (Q dan D; ubah huruf untuk tata letak keyboard Anda)
  • kanan bawah kiri ditugaskan ke salib
  • klik kiri mouse ada di Z (belakang) untuk menembak, dan klik kanan pada R (rb). Anda mungkin ingin mengubah tombol R ke KEY_SPACE untuk melompat, tergantung dari gim yang Anda mainkan.
  • A dan B ada di roda mouse, sehingga Anda dapat dengan mudah mengganti senjata.
  • tombol L (lb) dibiarkan tidak disetel

Semoga ini bisa membantu pemain lain.

Todo Jika seseorang tahu bagaimana melakukannya, saya akan tertarik untuk mengetahui cara mengatur semacam "area tengah" di mana kursor mouse tidak bergerak, bahkan jika tongkat tidak sempurna di tengah. Ini akan menghindari kursor bergerak sedikit ketika Anda tidak menggunakan gamepad tetapi masih diaktifkan.

totoine
sumber
1

Saya sudah mencoba xboxdrv dan sepertinya berhasil tetapi tidak pernah sempurna untuk saya dan saya harus mengkonfigurasi file konfigurasi secara manual. Solusi yang lebih baik tampaknya adalah proyek AntiMicro: https://github.com/Ryochan7/antimicro konfigurasinya sangat sederhana (walaupun GUI agak mendasar), dengan beberapa klik saya dapat:

  • konfigurasikan pad saya (F710 Wireless) sebagai mouse - hanya perlu menetapkan tombol / stick yang tepat untuk fungsi yang diinginkan dalam satu set;
  • dapatkan kunci "Logitech logo" pusat untuk beralih antara operasi mouse dan pad - Saya hanya memiliki set kedua di mana tidak ada tombol yang ditetapkan dan tombol pusat beralih di antara dua mode, karena itu saya dapat meluncurkan game menggunakan "mode mouse" dan kemudian beralih ke "mode pad" untuk bermain;
  • AntiMicro tampaknya menerapkan "zona mati" secara otomatis juga - ketika saya menggunakan xboxdrv saya harus melakukan ini secara manual dalam file konfigurasi karena kursor melayang perlahan sepanjang waktu dalam satu arah, di sini semuanya baik.

Saya pikir proyek ini cukup baru tetapi bagi saya tampaknya bekerja hampir sempurna sejauh ini. Masalah kecilnya adalah ia menciptakan ikon "baki" yang memungkinkan untuk berganti profil di sudut kiri atas yang tidak cocok dengan skema menu global Ubuntu.

pengguna126406
sumber
Terima kasih untuk ini. AntiMicro cukup bagus. Saya bisa mendapatkan Sixaxis lama saya (yaitu: Dualshock 3 minus rumble) mengirimkan acara keyboard dan mouse. Pengaturannya cukup mudah, dan dari apa yang saya lihat pengembang sangat responsif terhadap laporan bug.
Laurence Gonsalves