Hi epicfatigue,
90% of problems regarding PC CRT monitors are due to the standard resolutions/refresh rates from EDID conflicting with our custom defined ones. Unfortunately, as the main target of GM is arcade monitors, and this issue only affects Linux, this hasn't been sorted in GM yet, although there are workarounds.
Basically, you don't want GM to pick any of the resolutions which are already defined in the monitor's EDID, because our calculated timings won't apply. Usually, the resolutions in the EDID come with refresh rates such as 75 Hz, making games run at odd speeds. If you leave GM pick resolutions on its own, it won't be able to avoid the problematic ones.
Besides, forcing GM to use 640x480 is an invitation to troubles, because this resolution is defined in any single EDID out there. So, stay away of 640x480, 720x480, 800x600, 1024x768, etc.
Instead, use a non-standard resolution like 648x480. Or better, use a resolution mask like this:
-resolution 648x0
... this will allow GM to pick the best height forcing just the width and still avoid predefined resolutions. The wider the width you pick, the better results you'd get.
Also, consider using -cleanstretch 2.
(regarding the keyboard, I've had zero issues so far)