banner



Wacom.com Set Up Software Bundle Download Key Code Updated FREE

Wacom.com Set Up Software Bundle Download Key Code

Fixed drivers for Wacom Bamboo, Graphire, Intuos 1, 2, 3, and Cintiq 1st gen tablets on macOS Catalina / Big Sur / Monterey

Wacom's macOS drivers for Bamboo, Graphire, Intuos 1, 2 & 3 and Cintiq 1st gen tablets have bugs in them that crusade them to completely fail to start on macOS x.15 Catalina and later versions (including eleven Large Sur and 12 Monterey). This doesn't use to the Windows driver, or to the drivers for their newer tablets.

When yous try to open up the Wacom preference pane with a Bamboo tablet, you lot'll become an fault message proverb "Waiting for synchronization", then finally "There is a problem with your tablet driver. Please reboot your system. If the problem persists reinstall or update the driver". For an Intuos 3 or Cintiq 1st gen tablet, the preference pane will open, but clicking anything volition cause it to crash with the message "There was an error in Wacom Tablet preferences." For Graphire and Intuos 1 & two tablets, the driver's installer couldn't even run on Catalina.

Thankfully I was able to runway down the problems and I accept patched the drivers to fix them!

My fixed Bamboo driver (v5.three.vii-6) supports these tablets:

  • CTE-450, CTE-650 - Bamboo Fun / Bamboo Fine art Master (2007)
  • CTE-460, CTE-660 - Bamboo 1 Pen
  • CTF-430 - Bamboo One
  • CTH-300, CTH300, CTH301K - Bamboo Pad
  • CTH-460, CTH-660 - Bamboo Pen and Impact
  • CTH-461 - Bamboo Fun Pen and Bear upon / Bamboo Craft / Bamboo Fun Special Edition
  • CTH-470 - Bamboo Capture / Bamboo Pen & Touch / Bamboo Create
  • CTH-661 - Bamboo Fun / Bamboo Art Master (2009) / Bamboo Fun Pen and Bear on
  • CTH-670 - Bamboo Create
  • CTL-460, CTL-660 - Bamboo Pen
  • CTL-470 - Bamboo Connect / Bamboo Pen
  • CTT-460 - Bamboo Touch on
  • MTE-450 - Bamboo

My fixed Graphire 1 & two and Intuos ane & two commuter (v6.i.6-4) supports these tablets:

  • ET-0405-U - Graphire / Graphire 1 (USB)
  • ET-0405-R - Graphire / Graphire 1 (Series) - Untested, permit me know if it works!
  • ET-0405A - Graphire 2
  • GD-0405-U, GD-0608-U, GD-0912-U, GD-1212-U, GD-1218-U - Intuos (USB) (1998)
  • GD-0405-R, GD-0608-R, GD-0912-R, GD-1212-R, GD-1218-R - Intuos (Serial) (1998) - Untested
  • XD-0405-U, XD-0608-U, XD-0912-U, XD-1212-U, XD-1218-U - Intuos ii (USB)
  • XD-0405-R, XD-0608-R, XD-0912-R, XD-1212-R, XD-1218-R - Intuos 2 (Series) - Untested

My fixed Graphire 3 commuter (v5.2.half dozen-v) supports these tablets:

  • CTE-430, CTE-630 - Graphire iii
  • CTE-630BT - Graphire three Wireless

My fixed Graphire 4 driver (v5.3.0-3) supports these tablets:

  • CTE-440, CTE-640 - Graphire 4

And my stock-still Intuos three and Cintiq driver (v6.3.15-3) supports these tablets:

  • PTZ-430, PTZ-630, PTZ-630SE, PTZ-631W, PTZ-930, PTZ-1230, PTZ-1231W - Intuos three
  • DTZ-2100 - Cintiq 21UX 1st Gen.
  • DTZ-2000 - Cintiq 20WSX

For Intuos 4 my fix is not needed. You tin can use Wacom's official commuter v6.3.41-two instead.

🇦🇺 Simplified English instructions
🇧🇷 / 🇵🇹 Instruções em português
🇯🇵 日本語で表示
🇷🇺 Инструкция на русском языке
🇪🇸 Instrucciones en español
🇵🇱 Instrukcja po polsku
🇫🇷 Instructions en français

Install the ready

Download the right installer for your tablet hither and double click it to run it, this will install my stock-still version of Wacom'south commuter:

  • Fixed commuter v6.i.6-4 installer for Graphire 1 & 2 and Intuos 1 & 2 tablets
  • Fixed driver v5.2.6-v installer for Graphire iii tablets
  • Stock-still commuter v5.3.0-3 installer for Graphire 4 tablets
  • Stock-still commuter v5.3.7-half dozen installer for Bamboo tablets
  • Fixed driver v6.3.15-3 for Intuos 3 and Cintiq tablets

If y'all get an fault message that your Mac just allows apps to be installed from the App Store, right-click on it and click "Open" instead.

Subsequently installing, follow the instructions in the next section to set up up the tablet'southward permissions.

Set upward the tablet permissions

Touch your pen tip to your tablet, and it should prompt you visit Organization Preferences > Security & Privacy > Privacy Tab to grant the tablet permissions.

On the Accessibility page, click the padlock to unlock the page, then detect and tick any PenTabletDriver, WacomTabletDriver TabletDriver or WacomTabletSpringboard entries you lot come across in the list. Do the same on the Input Monitoring page.

If your tablet supports affect, touch the tablet with your finger, it should once again prompt you lot to grant permissions. On the Accessibility folio, tick the ConsumerTouchDriver or WacomTouchDriver entry.

With some tablets, the driver might only appear on the Input Monitoring page, and you lot may need to reboot a second time for information technology to appear on the Accessibility page likewise.

If your Wacom preference pane, pen support, or touch support is not notwithstanding working

Yous likely had permissions left over from the previous tablet driver, and these stale entries all need to be removed like then:

On the "Accessibility" page of Security & Privacy, Find annihilation related to Wacom in the list (e.m. PenTabletDriver, WacomTabletDriver, TabletDriver, ConsumerTouchDriver, WacomTabletSpringboard, WacomTouchDriver), select them, and click the minus button to remove them. Become to the "Input Monitoring page" and do the same at that place.

At present either reboot your estimator, or run these two commands in the Last, to reload the tablet driver. For Bamboo and Graphire 3 & 4 tablets:

              launchctl unload /Library/LaunchAgents/com.wacom.pentablet.plist  launchctl load -west /Library/LaunchAgents/com.wacom.pentablet.plist                          

For Graphire ane & 2, Intuos, and Cintiq tablets:

              launchctl unload /Library/LaunchAgents/com.wacom.wacomtablet.plist  launchctl load -w /Library/LaunchAgents/com.wacom.wacomtablet.plist                          

This should restore the prompts to enquire you to add permissions, so at present begin the instructions in this section again.

If nada ever appears in "Input Monitoring" for you

For a handful of people, the Wacom driver never appears in the Input Monitoring list for them. To fix this, start open up the "Last" app and paste this line in and press enter to ensure that the Wacom service is enabled:

For Bamboo and Graphire 3 & 4 tablets:

              launchctl load -westward /Library/LaunchAgents/com.wacom.pentablet.plist                          

For Graphire 1 & 2, Intuos, and Cintiq tablets:

              launchctl load -due west /Library/LaunchAgents/com.wacom.wacomtablet.plist                          

If that doesn't trigger it to ask y'all to add Input Monitoring permissions when you effort to employ the tablet, yous can add it manually instead.

In Finder, click Go -> Go to Binder, and paste this path in in that location and click OK:

              /Library/Application Support/Tablet/                          

In at that place yous should meet a "PenTabletDriver" file (Bamboo), "PenTabletSpringboard" (Graphire 3 & 4), or "WacomTabletSpringboard" (Graphire one & two, Intuos, Cintiq).

Unlock the Input Monitoring page, then drag the PenTabletDriver / PenTabletSpringboard / WacomTabletSpringboard file onto information technology to add it to the listing, and make sure it's ticked. At present reboot your reckoner, and when you try to use the tablet it should prompt you to tick it in the Accessibility page too, after which it should start working.

If information technology still doesn't work

Make sure you don't still have Wacom's very latest commuter installed. Use "Wacom Utility"/ "Tablet Utility" to fully uninstall all of Wacom's drivers (rather than just dragging them to the trash), then install my driver again.

Decadent preferences can foreclose things from working, particularly if you installed a bunch of different driver versions while trying to go things to work. Use Wacom Utility to reset your preferences, reboot, and try using the tablet again.

Support me

If yous enjoyed having your tablet back in activeness, please consider sending me a tip!

Donate button

This will help fund me and further evolution of these stock-still drivers.

Technical details of the bugs

Bamboo driver

PenTabletDriver launches 2 sub-drivers to do the piece of work for it, ConsumerTouchDriver and TabletDriver. To find those drivers within its Resources folder it eventually calls this role to extract a path from a URL:

CFString *              MacPaths::PathFromURL(CFURL *url) {     CFString *path;      path =              _objc_retainAutoreleasedReturnValue(url->path());              _objc_release(path);                              /*                Whoops, path is destroyed here!                */                            return              path;                              /*                Now returning a gratis'd path                */                            }

Forgive me for paraphrasing the original Objective C code every bit C++, I don't speak objc!

When CFURL creates the path, its reference count starts out at one. It queues the reference count to exist decremented later by calling autorelease() on it, and then returns information technology to Wacom's driver. This telephone call to autorelease pairs upward with Wacom'south retainAutoreleasedReturnValue() call, and and so and leaves the path's reference count untouched, at ane.

But now the Wacom driver calls _objc_release() on the path. This decrements its reference count to 0, and the path is immediately freed!

This freed path is used while launching the sub-driver, which tin trigger a segfault in ProcessUtils::LaunchApplicationWithBundleID(). This kills the driver.

The set up is a single-byte alter which replaces the call to _objc_release() in PathFromURL to a call to _objc_retain(). This prevents the path from being freed earlier it is used, which cures the segfault.

The ConsumerTouchDriver as well contains this same bug, and the patch is the same in that location.

Both the pen commuter and the touch driver need fixes to stop them from crashing when a multi-touch on gesture is performed, or the ringlet ring is used to zoom.

When a gesture is performed, the function CMacHIDGestureEventOSX1010::PostGesture is responsible for sending that gesture to the operating arrangement:

              void              CMacHIDGestureEventOSX1010::PostGesture(EIOHIDEventType gestureType_I,              int32_t              eventDirAmount) {   __CFDataOSX1010 *eventStructure;              if              (gestureType_I ==              61                              /*                kCGHIDEventTypeGestureStarted                */              ) {              this->eventPhase              =              1                              /*                kCGSGesturePhaseBegan                */              ;   }              else              {              this->eventPhase              =              4                              /*                kCGSGesturePhaseEnded                */              ;     (**(code **)(*(long              *)this              +              0x18))(0,this,(uint32_t) eventDirAmount);   }    eventStructure = (__CFDataOSX1010 *)              _CGEventCreate(0);                              //                Dubious              _CGEventSetType(eventStructure,              29                              /*                kCGSEventGesture                */              );    eventStructure->eventSubType              = gestureType_I;                              //                Relies on the exact memory layout of CGEvent (!)              eventStructure->eventDirAmount              = eventDirAmount;                              //                Ditto              _CGEventPost(0, eventStructure);              _CFRelease(eventStructure); }

Notice how the effect from CGEventCreate is being cast to a structure? CGEvent is supposed to be an opaque type, programs aren't supposed to know or rely on its layout, since its structure changes from OS version to OS version, only here it is beingness cast to a construction and so that its eventSubType and eventDirAmount fields tin can exist assigned straight. These two writes cause heap corruption on Catalina and trigger a crash, considering the layout of CGEvent has changed since Sierra!

The proper fashion to store values into an effect is by using the CGEventSetIntegerValueField API, which allows you to refer to fields of CGEvent by a logical ID instead of their position in memory. And so what are the equivalent field IDs for the ii writes that the Wacom driver needs to make?

I disassembled macOS Sierra'southward SkyLight framework, which contains the implementation for CGEventSetIntegerValueField, to encounter what the IDs should accept been for those fields. It appears that the eventSubType can be written past field ID 110, and the eventDirAmount tin be written by ID 115. But these field IDs are nowhere to be plant in Apple tree's documentation, which explains why Wacom couldn't use them!

I did some Googling and discovered that these fields are undocumented because they're part of Apple tree's private API. This WebKit header reveals their names:

              kCGEventGestureHIDType = 110 kCGEventGestureSwipeValue = 115 kCGEventGesturePhase = 132                          

And those private API fields are stable from Sierra all the mode to Big Sur! Now that we know this, the two assignments to eventStructure tin can be replaced by these calls, and the driver crashes are eliminated:

              _CGEventSetIntegerValueField(eventStructure,              110                              /*                kCGEventGestureHIDType                */              ,    gestureType_I);              _CGEventSetIntegerValueField(eventStructure,              115                              /*                kCGEventGestureSwipeValue                */              , eventDirAmount);

The floating-point version of PostGesture has the aforementioned consequence:

              void              CMacHIDGestureEventOSX1010::PostGesture(EIOHIDEventType eventSubType,              float              dirAmount) {   __CFDataOSX1010 *eventStructure;    eventStructure = (__CFDataOSX1010 *)_CGEventCreate(0);              _CGEventSetType(eventStructure,              29                              /*                kCGSEventGesture                */              );      eventStructure->eventSubType              = eventSubType;                              //                !              eventStructure->eventDirAmount              =              reinterpret_cast<int32_t&>(dirAmount);                              //                !              eventStructure->eventState              =              this->eventPhase;                              //                !              if              (this->eventPhase              ==              ane                              /*                kCGSGesturePhaseBegan                */              ) {              this->eventPhase              =              two                              /*                kCGSGesturePhaseChanged                */              ;   }              _CGEventSetLocation(eventStructure,              GetMouseLocationInScreenCoordinates());              _CGEventPost(0, eventStructure);              _CFRelease(eventStructure); }

And we tin patch it like so:

              _CGEventSetIntegerValueField(eventStructure,              110                              /*                kCGEventGestureHIDType                */              ,    gestureType_I);              _CGEventSetIntegerValueField(eventStructure,              115                              /*                kCGEventGestureSwipeValue                */              ,              reinterpret_cast<int32_t&>(dirAmount));              _CGEventSetIntegerValueField(eventStructure,              132                              /*                kCGEventGesturePhase                */              ,              this->eventPhase);

Intuos 3 and Cintiq driver

The Intuos three and Cintiq driver has a bug in its preference pane that causes it to crash as shortly every bit an item is clicked on.

One of the main features of the preference pane'due south UI are the lists of icons representing the tablets, tools and applications you lot tin configure. That icon listing control uses a part like this to acceleration events (such as clicks) to its children:

              void              WTCCPLIconList::action:(ID effect, SEL param_2, ID param_3) {              int              selectedIndex;   ID target;   ID activity;      target =              _objc_retainAutoreleasedReturnValue(issue->target());   activity = result->activeness();   selectedIndex = upshot->selectedIndex();    result->scrollIndexToVisible(selectedIndex);              if              ((target !=              0) && (action !=              0)) {     lawmaking* handler = target->methodForSelector(action);      Object *upshot =              handler(target, activeness, upshot);                          outcome =              _objc_retainAutoreleasedReturnValue(result);                              //                (!)              _objc_release(result);                              //                (!)              }    event->updateButtonStates();              _objc_release(target); }

The problem with this code is that it requires the event's handler() function to return an object, which it then uselessly retains() and releases(). Just i of the handler functions that will exist called is OEventDispatcher_Professional::listClickAction(), and that office is a void function (with no well-divers return value)!

So action:() ends up calling retain() and release() on a garbage pointer, which causes a segfault.

The patch here is piece of cake - that useless pair of retain() and release() calls is deleted. The same problems exists in ONumberTextField::textDidChange:, with the aforementioned fix.

In that location'south another problem with this driver. If, while trying to get your tablet to work, you accidentally install the latest Wacom commuter (that doesn't support Intuos 3), it writes a newer-format preference file that the erstwhile Intuos 3 driver volition crash when trying to read. And this situation doesn't resolve itself, the user has to manually use the Wacom Utility to delete the tablet preferences in order to set up it.

This is odd because the preference file includes a version number which is designed to avoid this very situation. The old driver uses version 5, and the latest driver uses version half-dozen:

<ImportFileVersion              blazon=                "integer"              >six</ImportFileVersion>

And the commuter code explicitly checks for this version number and should abort when it is likewise new:

              CTabletDriver::ReadSettings(basic_string settingsFilename, ...)  {         basic_string settingsFileContent;     CSettingsMap settingsMap;      ...              ReadFromXMLFile(settingsMap, settingsFilename, settingsFileContent);      SettingsMigration *migration =              SettingsMigration::MigratePen(settingsMap);              if              (migration !=              nullptr) {              int              fileVersion = settingsMap.IntegerForKeyWithDefault(                "ImportFileVersion"              , -1)              if              (fileVersion <              1) {                              //                Report error              }              else              if              (fileVersion <=              this->supportedVersion) {                              //                Accept the loaded settings              }              else              {                              //                Written report error: Settings are too new                            }     }      ... }

But the driver never aborts, instead it crashes while attempting to load the preferences. So what'southward going wrong hither? The hugger-mugger lies within the MigratePen() function. This function is designed to upgrade older settings files to the current version, but unfortunately in the process information technology unconditionally overwrites the ImportFileVersion with the current version (5)! This leaves CTabletDriver::ReadSettings() unable to find that the settings are as well new to be parsed.

To solve this I beefed up the invalid version detection lawmaking from MigratePen():

              if              (settingsVersion <              ane) {                              //                Report invalid settings version and return NULL              }            

To make it:

              if              (settingsVersion <              1              || settingsVersion >              5) {                              //                Report invalid settings version and return NULL              }            

So now if the preferences are likewise new, MigratePen() won't attempt to upgrade them, and ReadSettings() will cleanly skip loading the preferences. This causes the preferences to remain at their defaults, and if the user edits the settings using the preference pane, the settings should be cleanly overwritten.

Graphire iii & 4 drivers

The installers for the Graphire drivers are an old format that Catalina no longer supports, so I had to completely rebuild them.

Graphire's preference pane incorrectly relied on individual symbols from the macOS standard library that are no longer present in Catalina, then information technology could no longer showtime.

For example, Wacom'due south NSNibWakingOverride::awakeFromNib() office is called during GUI deserialization, and adds the loaded GUI control to a map so it can be accessed by its tag later:

              void              NSNibWakingOverride::awakeFromNib(NSControl *this) {   OMasterDictionaryPtr->addObject:withTag:(this,              this->_tag)); }

Simply this relies on reading NSControl._tag, which is a private field. In macOS 10.9 that worked because NSControl was defined like this:

              @interface              NSControl              :              NSView              {                              /*All instance variables are individual*/                            NSInteger              _tag;              id              _cell;              struct              __conFlags {         ...     } _conFlags; }

Merely in macOS 10.10, NSControl was refactored to motility the _tag field into a new _aux field, making it inaccessible:

              @interface              NSControl              :              NSView              {                              /*All example variables are private*/                            NSControlAuxiliary *_aux;              id              _cell;              struct              __conFlags {         ...     } _conFlags; }              @holding              NSInteger              tag;

I patched awakeFromNib to make it properly call the public accessor function for this field:

              void              NSNibWakingOverride::awakeFromNib(NSControl *this) {   OMasterDictionaryPtr->addObject:withTag:(this,              this->tag())); }

In Wacom'south OPopupOutlineView::reloadData() function, the private NSTableView._dataSource field is incorrectly read direct:

              void              OPopupOutlineView::reloadData(OPopupOutlineView *this) {              this->_dataSource.willReloadDataForOutlineView(this);      ... }

So I patched this to apply the public accessor instead:

              void              OPopupOutlineView::reloadData(OPopupOutlineView *this) {              this->dataSource()->willReloadDataForOutlineView(this);      ... }

Graphire 1 & 2 and Intuos 1 & 2 drivers

These drivers take the same problems as the Graphire three & 4 drivers, plus the same _dataSource problem in their ORadialSubMenuTableView::reloadData() method, with the same fix.

Wacom.com Set Up Software Bundle Download Key Code

DOWNLOAD HERE

Source: https://github.com/thenickdude/wacom-driver-fix

Posted by: giltnerthrodgent.blogspot.com

0 Response to "Wacom.com Set Up Software Bundle Download Key Code Updated FREE"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel