Batocera build version
43.1
Your architecture
x86_64 (arcade cabinet PC)
Your Graphic Processor Unit(s) (GPU)
AMD Radeon 780M, integrated Ryzen 9 PRO 8945HS
Issue description
On an arcade cabinet, the standard Hotkey+Start exit gesture does nothing in standalone PCSX2. The chord is detected correctly at every layer (verified live): evmapy generates hotkey+start → KEY_EXIT, but the pcsx2 hotkeygen context translates exit to Alt+F4 while the PCSX2 configgen simultaneously binds ToggleFrameLimit = Keyboard/F4. PCSX2 consumes the F4 and toggles fast-forward instead of exiting. Same collision affects a physical keyboard (Alt+F4 fast-forwards the game). With no keyboard attached there is no way to exit a PS2 game short of SSH + emukill.
Not a duplicate of #4408 / #9091 (reconnect-triggered) or #15797 (controller profiles): this reproduces with a stable, correctly-assigned P1 and no disconnect.
hotkeygen --list during a live session shows:
Context [pcsx2]:
exit → ['KEY_LEFTALT', 'KEY_F4']
menu → KEY_ESC
hotkeygen --send menu opens the pause menu correctly, proving the menu route works. A user-level evmapy override (ps2.keys mapping hotkey+start → KEY_MENU) fully fixes it — details in the fix-attempts section.
Detailed reproduction steps
- x86_64 arcade cabinet, USB arcade encoder enumerating as "Generic X-Box pad" (GUID 030000006b1400000306000000010000), mapped in EmulationStation with Hotkey on Select (shared physical button, standard for arcade panels).
- Launch any PS2 game via standalone PCSX2 from EmulationStation.
- Press Hotkey+Start → nothing happens (no pause menu, no exit).
- But only when checked live: /var/run/evmapy/event8.json contains {"trigger": ["hotkey","start"], "type": "key", "target": ["KEY_EXIT"]} — the chord IS detected and dispatched; the failure is downstream.
- From an attached keyboard, press Alt+F4 → game fast-forwards instead of exiting (F4 consumed by ToggleFrameLimit).
- Generated /userdata/system/configs/PCSX2/inis/PCSX2.ini contains: OpenPauseMenu = Keyboard/Escape and ToggleFrameLimit = Keyboard/F4.
- Player assignment confirmed correct in launch log ([P1] Stored GUID matches encoder) and [Pad1] binds the encoder — reproduces without any second-controller interference or reconnect event.
Details of any attempts to fix this yourself
Tried and not durable / not viable:
- Hand-editing OpenPauseMenu in PCSX2.ini → rewritten by the configgen on every game launch.
- Remapping via PCSX2's in-emulator binding UI → captures all simultaneous inputs into one AND-chord and destroyed the default Escape binding, removing every exit path (recovered via SSH: batocera-es-swissknife --emukill).
- Explicit P1 assignment / removing the second controller → no change; assignment was already correct.
Working fix (verified on physical hardware): create /userdata/system/configs/evmapy/ps2.keys:
{
"actions_player1": [
{
"trigger": ["hotkey", "start"],
"type": "key",
"target": ["KEY_MENU"],
"description": "PCSX2: open pause menu via Hotkey+Start"
}
]
}
The evmapy generator merges user files before /usr/share/evmapy/hotkeys.keys and keeps the first matching trigger, so this reroutes Select+Start → KEY_MENU → Escape → PCSX2 pause menu → Close Game (graceful exit, memory-card writes complete). Verified in /var/run/evmapy/event8.json after relaunch. Rollback: delete the file.
Suggested default fix: the pcsx2 hotkeygen context should not map exit to Alt+F4 while the configgen binds F4 to ToggleFrameLimit — map exit to KEY_ESC, or map hotkey+start to menu for pcsx2, or move the frame-limit binding off F4.
Details of any modifications you have made to Batocera.
None at time of reproduction — stock 43.1 install. After diagnosing, I added a user-level workaround file /userdata/system/configs/evmapy/ps2.keys (described below); removing it restores the stock broken behavior, confirming the issue is in the default configuration.
Logs and data
Attached below: Batocera support file, plus a full diagnostic writeup (markdown) covering every verified layer — launch log P1 GUID assignment, es_input.cfg mapping, live /var/run/evmapy/event8.json contents, hotkeygen --list output for the [pcsx2] context, generated PCSX2.ini [Hotkeys] section, and the verified transient test (hotkeygen --send menu opens the pause menu during gameplay).
Create /userdata/system/configs/evmapy/ps2.keys:
{
"actions_player1": [
{
"trigger": ["hotkey", "start"],
"type": "key",
"target": ["KEY_MENU"],
"description": "PCSX2: open pause menu via Hotkey+Start"
}
]
}
Batocera build version
43.1
Your architecture
x86_64 (arcade cabinet PC)
Your Graphic Processor Unit(s) (GPU)
AMD Radeon 780M, integrated Ryzen 9 PRO 8945HS
Issue description
On an arcade cabinet, the standard Hotkey+Start exit gesture does nothing in standalone PCSX2. The chord is detected correctly at every layer (verified live): evmapy generates hotkey+start → KEY_EXIT, but the pcsx2 hotkeygen context translates exit to Alt+F4 while the PCSX2 configgen simultaneously binds ToggleFrameLimit = Keyboard/F4. PCSX2 consumes the F4 and toggles fast-forward instead of exiting. Same collision affects a physical keyboard (Alt+F4 fast-forwards the game). With no keyboard attached there is no way to exit a PS2 game short of SSH + emukill.
Not a duplicate of #4408 / #9091 (reconnect-triggered) or #15797 (controller profiles): this reproduces with a stable, correctly-assigned P1 and no disconnect.
hotkeygen --list during a live session shows:
Context [pcsx2]:
exit → ['KEY_LEFTALT', 'KEY_F4']
menu → KEY_ESC
hotkeygen --send menu opens the pause menu correctly, proving the menu route works. A user-level evmapy override (ps2.keys mapping hotkey+start → KEY_MENU) fully fixes it — details in the fix-attempts section.
Detailed reproduction steps
Details of any attempts to fix this yourself
Tried and not durable / not viable:
Working fix (verified on physical hardware): create /userdata/system/configs/evmapy/ps2.keys:
{
"actions_player1": [
{
"trigger": ["hotkey", "start"],
"type": "key",
"target": ["KEY_MENU"],
"description": "PCSX2: open pause menu via Hotkey+Start"
}
]
}
The evmapy generator merges user files before /usr/share/evmapy/hotkeys.keys and keeps the first matching trigger, so this reroutes Select+Start → KEY_MENU → Escape → PCSX2 pause menu → Close Game (graceful exit, memory-card writes complete). Verified in /var/run/evmapy/event8.json after relaunch. Rollback: delete the file.
Suggested default fix: the pcsx2 hotkeygen context should not map exit to Alt+F4 while the configgen binds F4 to ToggleFrameLimit — map exit to KEY_ESC, or map hotkey+start to menu for pcsx2, or move the frame-limit binding off F4.
Details of any modifications you have made to Batocera.
None at time of reproduction — stock 43.1 install. After diagnosing, I added a user-level workaround file /userdata/system/configs/evmapy/ps2.keys (described below); removing it restores the stock broken behavior, confirming the issue is in the default configuration.
Logs and data
Attached below: Batocera support file, plus a full diagnostic writeup (markdown) covering every verified layer — launch log P1 GUID assignment, es_input.cfg mapping, live /var/run/evmapy/event8.json contents, hotkeygen --list output for the [pcsx2] context, generated PCSX2.ini [Hotkeys] section, and the verified transient test (hotkeygen --send menu opens the pause menu during gameplay).
Create
/userdata/system/configs/evmapy/ps2.keys:{ "actions_player1": [ { "trigger": ["hotkey", "start"], "type": "key", "target": ["KEY_MENU"], "description": "PCSX2: open pause menu via Hotkey+Start" } ] }