Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.
an idea

I've tried everything I can think of to get four-finger gestures working on my Early 2008 MacBook Pro, but so far nothing has worked.

I followed michaelb's procedure above and grabbed the following files from a friend's brand-new MacBook:

AppleUSBMultitouch.kext
AppleUSBTopCase.kext

The new keyboard prefpane
The new trackpad prefpane

I rewrote the info.plist file located within AppleUSBMultitouch.kext to enable four-finger gestures for all trackpads, then rebooted.

After a reboot, I found that the trackpad prefpane was refusing to load, and I had no multitouch functionality at all, not even scrolling. Also, the special function keys on my keyboard (brightness, volume, etc.) weren't working.

I checked the console logs and found that the trackpad prefpane wasn't loading because it was calling on a file located in /System/Library/PrivateFrameworks/MachineSettings.framework which didn't match what the trackpad prefpane was asking for.

So I got the applicable file, /System/Library/PrivateFrameworks/MachineSettings.framework/Versions/A/MachineSettings from my friend's MacBook. Actually, I just grabbed the entire MachineSettings.framework folder.

After overwriting the old MachineSettings.framework, I restarted again. Multitouch still wasn't working, and I got a message from crashreporter saying that activateSettings had crashed.

I was able to diagnose this by finding the file that crashed, /System/Library/PrivateFrameworks/Admin.framework/Versions/A/Resources/activateSettings, and I replaced it with the same file from my friend's MacBook.

I restarted again. Still no multitouch, and now no crash messages, either.


Here's the progress I have made thus far:

Multitouch does not work at all now, including the gestures that originally did work on this machine, e.g. two-finger click, scrolling, pinching, rotating, three-finger swipe.

The new trackpad prefpane does come up, and it shows all the animations for the new four-finger gestures in the little viewer in the corner. However, none of the multitouch gestures work no matter what I do to the settings.

The new trackpad prefpane shows up in "Other" in system preferences, rather than "Hardware".

Special function keys on my keyboard do work. I'm not sure why they failed before.

Typing "kextstat" in terminal shows that the extension AppleUSBTopCase.kext is not loaded. That may be the source of the multitouch failure right there, but I'm not at all certain how to get this extension to load.

If anyone else has any ideas where to go from here, please let me know, because I'm stumped.



try kextload to load the AppleUSBTopCase.kext, the man says:

KEXTLOAD(8) BSD System Manager's Manual KEXTLOAD(8)

NAME
kextload -- loads, validates, and generates symbols for a kernel extension (kext)
 
info

Basic loading
To load a kext you must run kextload as the superuser and supply a kext bundle name; no options are required:

kextload TabletDriver.kext

Alternatively, you can use the -b option to specify a kext by its CFBundleIdentifier:

kextload -b com.mycompany.driver.TabletDriver

With no additional options kextload will look in /System/Library/Extensions for a kext with the given CFBundleI-
dentifier. Adding repository directories with the -r option or individual kexts with the -d option expands the
set of kexts that kextload looks among:

kextload -r ${USER}/Library/Extensions TabletDriver.kext

If you're modifying system startup to load a kext, be sure to check whether the system is starting up in safe
boot mode (typically when the user presses the Shift key) and use the -x option to indicate this. (The various
rc files in /etc can simply use the $SafeBoot shell variable on the command line. It evaluates to an empty
string during normal startup and "-x" during safe boot mode.)

Validating Kexts
The -t option causes kextload to perform all possible validation and authentication checks on the specified
kexts and to attempt to resolve their dependencies. If there are any problems with the specified kexts,
kextload prints a list of the problems.

The -t option is typically used with -n after a load failure to pinpoint a problem. It can be used with any
other set of options, however.

If you want to validate a kext in isolation, as in a build environment where dependencies may not be available,
you can use the -e and -Z options to omit the /System/Library/Extensions repository and to suppress dependency
resolution, respectively:

kextload -entZ PacketSniffer.kext

Only validation and authentication checks will be performed.

Generating Debug Symbols When Loading
To generate a symbol file for use with gdb when loading a kext, use the -s option to specify a directory where
symbol files will be written for the kext being loaded and all its dependencies.

kextload -s ~/ksyms PacketSniffer.kext

Generating Debug Symbols For an Already-Loaded Kext
If you want to generate symbols for a kext that's already loaded, whether on the same system or on another, use
the -s option along with the -n option. Since in this case addresses must be known for the kext and all its
dependencies, though, you must specify these. If you don't indicate them on the command line, kextload will ask
you for the load address of each kext needed. Use kextstat(8) on the machine you're generating symbols for to
get these addresses and enter them at each prompt.

kextload -n -s ~/ksyms GrobbleEthernet.kext
enter the hexadecimal load addresses for these modules:
com.apple.iokit.IONetworkingFamily: 0x1001000
...

Alternatively, if you know the CFBundleIdentifiers of all the kexts, you can use the -a option for each kext
(you needn't specify -n when using the -a option):

kextload -s ~/ksyms \
-a com.apple.iokit.IONetworkingFamily@0x1001000 \
-a com.apple.iokit.IOPCIFamily@0x1004000 \
-a com.mycompany.driver.GrobbleEthernet@0x1007000 \
GrobbleEthernet.kext

Simplest of all, however, provided you can run kextload on the same machine as the loaded kext, is to use the -A
option, which checks with the kernel for all loaded kexts and automatically gets their load addresses.

kextload -s ~/ksyms -A GrobbleEthernet.kext

Explicitly Specifying Dependencies
Because kextload resolves dependencies automatically, it's possible that a kext other than the one you intend
might get used as a dependency (such as when there are multiple versions, or if you're working on a new version
of a kext that's already installed in /System/Library/Extensions). By default, when loading a kext into the
kernel kextload checks which versions of possible dependencies are already loaded in order to assure a success-
ful load. When not loading, however, it always chooses the most recent versions of any dependencies.

If you want to have complete control over the set of extensions used to resolve dependencies, use the -e, -d,
and -r options. The -e option excludes the standard /System/Library/Extensions folder, leaving the set of can-
didate extensions for dependency resolution entirely up to you. To specify candidate dependencies you use
either -d, which names a single kext as a candidate, or -r, which adds an entire directory of extensions.

kextload -n -s ~/ksyms -e \
-d /System/Library/Extensions/System.kext \
-r ~/TestKexts -d JoystickSupport.kext JoystickDriver.kext

Note also that if you use -e, you must supply some version of the System.kext bundle in order to supply informa-
tion about the kernel. This should always match the kernel you're linking against, which is by default the
installed kernel on the machine you're using kextload on; you can use the -k option to indicate a different ker-
nel file.

Debug-Loading an I/O Kit Driver
If you need to debug an I/O Kit driver's early startup code, you must load the driver on the target machine
without starting matching by using the -l option:

kextload -l DiskController.kext

Once you have done this, you can use the generated symbol file in your debug session to set breakpoints and then
trigger matching by running kextload again on the target machine with the -m option:

kextload -m DiskController.kext

You may wish to use the -p option as well in order to send selected personalities to the kernel. Alternatively,
you can use the -i option for the whole process, which causes kextload to pause just before loading any person-
alities and then to ask you for each personality whether that one should be sent to the kernel:

kextload -i DiskController.kext

Debug-Loading a non-I/O Kit Kext
A non-I/O Kit kext doesn't have a personality-matching phase of loading; it just starts executing. In order to
debug a non-I/O Kit kext's startup code, you must use the -i or -I option, which pauses loading at each signifi-
cant stage so that you can set up your debugging session as needed before proceeding.

FILES
/System/Library/Extensions The standard system repository of kernel extensions
directoryname/Caches/* Cache files for a given directory of kernel extensions
/var/run/mach.sym The symbol file for the running kernel, written by kextd(8) at system startup.
/mach_kernel The default kernel file, used for linking as a last resort.

DIAGNOSTICS
kextload exits with a zero status upon success. Upon failure, it prints an error message and continues process-
ing any kexts if possible, then exits with a nonzero status.

For a kext to be loadable, it must be valid, authentic, have all dependencies met (that is, all dependencies
must be found and loadable). A valid kext has a well formed bundle, info dictionary, and executable. An
authentic kext's component files are owned by root:wheel, with permissions nonwritable by group and other. If
your kext fails to load, try using the -t option to print diagnostics related to validation and authentication.

Also, of course, the executable must contain code for the host machine's architecture and link successfully.
However, since this is expensive to do, these checks are not made unless the kext is actually being linked. You
can confirm these aspects of loadability by attempting to generate symbol files using the -s option.

SEE ALSO
kextcache(8), kextd(8), kextstat(8), kextunload(8)

BUGS
Upon encountering a kext with validation errors, kextload typically prints an error message about that kext,
even if it isn't involved in the load request.
 
I tried that earlier, but I got an error in terminal that said:

kextload: extension /System/Library/Extensions/AppleUSBTopCase.kext has no executable and no personalities

Running kextstat then shows the kext is not loaded.
 
I tried that earlier, but I got an error in terminal that said:

kextload: extension /System/Library/Extensions/AppleUSBTopCase.kext has no executable and no personalities

Running kextstat then shows the kext is not loaded.

Perhaps the file didn't copy properly or is corrupt?
 
I don't think so.

I've given up for now. I'll wait until the combo updater for 10.5.6 comes out and see if I can have more luck with that.
 
It looks too difficult for me to do this mod on my 1st gen. Air. If someone has an easier way or preloaded files, I'll be willing to pay for your troubles if you're willing to share.
 
Interesting stuff.

Always wondered what was *really* different about the new trackpads...
 
man o man do i wish i could have those features (without buying the new laptop)

for the people who tried copying the files onto the e08 mbp, i think the reason it did not work is because it is trying to access new files that it cannot find such as the application switcher and so on.

hoping for a patch or app!
 
risenphoenixkai:

There's another file that looks interesting:
/System/Library/PrivateFrameworks/MultitouchSupport.framework

I copied that, too, and nothing broke. (But 4 finger gestures didn't appear in the prefpane, either.)


I eventually gave up and did michaelb's method. It worked on my MBP. But apparently the new QuickTime (the one with hardware accelerated H.264) has problems on the older Mac. iTunes and QuickTime player became very unresponsive. So I advise anybody to wait for 10.5.6 as well.

I, however, am addicted already. I rather give up iTunes than my new four-fingered friends. ;)
 
I got so excited when I read this on the front page!

Please someone get this to work...
 
is it possible to add 4 finger gestures without installing the new 10.5.5.?!

thx

mo
 
I have bundled all of the items into a PKG installer for easy install. Both KEXTs, both Prefpanes, and both Private Frameworks.

Suffice to say, you will need the most current 10.5.5 updates and an authentic Apple laptop in order to run this. If your laptop NEVER supported multi-touch gestures then expect this to screw your laptop up real nice.

EDIT: Doesn't work... So don't use it.
 
ok, but i have an 1st gen macbook air and os x 10.5.5, should it then work?
the os is the one which came with my machine or do i need an os from a latest macbook/pro?


thanks
 
ok, but i have an 1st gen macbook air and os x 10.5.5, should it then work?
the os is the one which came with my machine or do i need an os from a latest macbook/pro?


thanks

Best case, it should work.

Worst case, you lose your keyboard and mouse and end up reinstalling.

I don't have the answer. I'm waiting to see if any brave souls will answer that question.
 
ok, unfortunately i am not so brave when it comes to play arround with my laptop, so i'll have to wait...and see.

but thanks
 
I have bundled all of the items into a PKG installer for easy install. Both KEXTs, both Prefpanes, and both Private Frameworks.

Suffice to say, you will need the most current 10.5.5 updates and an authentic Apple laptop in order to run this. If your laptop NEVER supported multi-touch gestures then expect this to screw your laptop up real nice.

Doesn't work on my Early 2008 MBP. I have the same problems as before when I tried manually installing all the kexts and prefpanes - after a restart, I have no multitouch functionality whatsoever.
 
screw this, i am too curious, so what do i have to do? just install and restart?
@risenphoenixkai maybe that is because early 2008 mbp has not multitouch in the first place, compared to mba?!
 
screw this, i am too curious, so what do i have to do? just install and restart?
@risenphoenixkai maybe that is because early 2008 mbp has not multitouch in the first place, compared to mba?!

Wrong. Early 2008 MBPs have the same multitouch controller as the MBA.
 
Wrong. Early 2008 MBPs have the same multitouch controller as the MBA.

ok. but i am having the same problem as you after installing the bundle form john7jr, no clicking no nothing, just the good old (and slow) mouse moving and clicking on the narrow mba bar...i am having the trackpad in my prefrences though, but it tells me: Could not load Trackpad preference pane.

what can i do?

thx
 
anyone with the same prefpane problem on a early macbook air?
what can i do do either make it work right or at least get my "old" 3 finger gestures back (without reinstalling)


thx

mo
 
Doesn't work on my Early 2008 MBP. I have the same problems as before when I tried manually installing all the kexts and prefpanes - after a restart, I have no multitouch functionality whatsoever.

Well, at least you confirmed that you didn't do it wrong the first time.

So there's still a piece missing to the puzzle right now. Any sign of a missing piece? I added the pieces to the plist. Perhaps the plist trick (as-is) only works for the Air and the Pro needs additional plist love to get it working?
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.