Changing psm (mouse) resolution?
Ronald F. Guilmette
rfg at tristatelogic.com
Fri Apr 20 21:03:00 UTC 2012
In message <20120420004050.9b3f1a3a.freebsd at edvax.de>,
Polytropon <freebsd at edvax.de> wrote:
>On Thu, 19 Apr 2012 14:25:48 -0700, Ronald F. Guilmette wrote:
>> The man page for the psm driver says:
>> ... The current resolution can be changed at runtime.
>> Unfortunately, it fails to mention any sort of command line utility
>> that would provide this functionality.
>> Is there a command line utility that provides this functionality? Or do
>> I need to write one from scratch, using the ioctl calls that are documented
>> in the man page?
>See "man moused" for details, especially the -r <resolution> option
>should be useful. You can combine it with -f for testing. According
>to the manpage, something like
> # moused -f -r 300 -a 2.0 -p /dev/psm0 -t ps/2
First, thanks to both Polytropon <freebsd at edvax.de> and Dan Nelson
<dnelson at allantgroup.com> for replying with relevant information.
Unfortunately, even though I now know about the -r option for moused,
this has not been enough to resolve the problem I am having, and I'm
going to need to delve into this more deeply.
Here is the problem in a nutshell:
My old mouse was (is) a relatively ancient Logitech M-BJ69. This is a
wired mouse. It works great and I have been using it for many years.
But it was getting long in the tooth (and I never mich liked the wire,
which somehow always got tangled) so recently I acquired I new Logitech
MX600 wireless mose. (This is actually an older model now, but still
much newer than my M-BJ69. I got the MX600 specifically because the
specs for it seemed to indicate that it would work also with a DVI+PS/2
KVM I have here, and also with my old Windows 2000 system.)
My new MX600 does indeed ``work'' (for some value of ``work'') on both
my Freebsd 8.2 system and also on my Win 2000 system, and also with my
KVM. The problem however is that its sensitivity is (by my mesurement)
at least 3x what my old mouse... the one that I am accustomed to using...
had. So when I move the MX600 just a little, the mouse cursor flys all
of the way across my screen. For me, this makes my brand new MX600
unusable. And given that I just purchased it, I am disappointed, as you
OK, so since Polytropon and Dan Nelson were kind enough to respond the other
day, I have now added the following to my /etc/rc.conf file and then rebooted:
This apparently made no difference at all in the behavior of the mouse, so
I am now greatly disheartened. But I would still very much like to solve
this problem, and I would like to receive suggestions as to how to proceed.
First however, allow me to provide one data point which is relevant to
On Windows, Logitech supplies a small program called "SetPoint" which allows
a user of one of their mice to adjust the sensitivity aka "resolution" (or
what Logitech calls "pointer speed") of the currently connected mouse.
Although I can't yet get this program to work properly on Windows 2000,
I have a Windows 7 system where it does work, and I've tried hooking up
my new MX600 to that (Win 7) system and then running Logitech's SetPoint
The interesting thing is that SetPoint provides a slider in the user interface
that allows the user to adjust the "pointer speed". I have just now checked,
and there are a grand total of 11 different positions along this slider
which the user can select when the MX600 is connected to the system in question.
The only point I am getting at is that in an ideal Universe, even under
FreeBSD a user would be able to select any one of these same 11 resolution
values for the currently attached mouse. I am dissuaded from thinking that
FreeBSD currently supports selection of any one of those different resolution
levels by the code I am looking at within /usr/src/sys/dev/atkbdc/psm.c:
if (mode.resolution >= 200)
mode.resolution = MOUSE_RES_HIGH;
else if (mode.resolution >= 100)
mode.resolution = MOUSE_RES_MEDIUMHIGH;
else if (mode.resolution >= 50)
mode.resolution = MOUSE_RES_MEDIUMLOW;
else if (mode.resolution > 0)
mode.resolution = MOUSE_RES_LOW;
In that same hypothetical ideal Universe, it would also be quite Nice to
be able to adjust the mouse sensitivity level EVEN while running X, whereas
given that (under FreeBSD) the mouse resolution is fixed at moused invocation
time, it seems that it is not possible to adjust this value AT ALL, ever,
except, effectively, at boot time. (Yes, I did try writing a small program
that would make an ioctl() to change the resolution on the fly, but apparently,
once moused has gotten ahold of the device file, one cannot even open it
again in preparation for making the ioctl() call. I see that moused
supports SIGHUP reinitialization. Given that it already supports THAT, it
is really a cryin' shame that there ain't no such thing as /etc/moused.conf
wherein it could pick up new operating parameters on the fly.)
So anyway, as I've said, I would really like to get this new mouse working
properly. It seems clear from the code above (supporting only 4 levels of
resolution, rather than, say, 11) that there is some Logitech-specific
protocol stuff that nobody ever got 'round to implementing, and that this
additional protocol stuff is what I need in order to get this mouse working
the way I want. (Well, that's the way it looks anyway, but what do I know?)
I am guessing that if I really want to get to the bottom of this, I may need
to communicate directly with whoever is the current maintainer of the psm
driver. The problem is that even though I am looking at the psm.c source
file, I can't quite make out who that might me. Can any of you kind folks
help me out here? All I need is an e-mail address for the current psm
maintainer and I guess I can take it from there.
P.S. I have a "support" question pending with Logitech about the issue
of SetPoint not being able to see the MX600 at all under Windows 2000.
(They may elect not to even bother answering that since the MX600 model
has been declared End-Of-Life by them. Sigh.) However when and if they
ever respond, you can bet your booty that I also intend to ask them what
the exact (dpi) _numbers_ are that correspond to those 11 separate
sensitivities that can be set for the MX600 under Win 7. Knowing those
numbers may perhaps help me in my efforts to persuade moused/psm to Do
The Right Thing. (Then again, maybe not.)
P.P.S. Assuming that the vendor is one of those pucker ass ones that
refuses to give out protocol specifics to the open source community,
how does one go about reverse engineering the protocol for a USB device
like this? What I mean to ask is: Is there already an established
methodology (hardware+software) whereby one can easily and inexpensively
eavesdrop on a set of USB transactions? You know, like between Mr. J.
Random Mouse and Windoze?
More information about the freebsd-questions