Posted on 09-19-2011 10:35 AM
Hi folks,
I seem to be suffering from a brain fart and can't locate info on creating an extension attribute for identifying Wacom tablets connected to units during inventory updates.
We did have one in place that I pulled from the list here but we seem to have lost it over the year and now I'm just stumped.
Can anyone share one you are using and/or pointers to where I can pick one up?
I'm looking though the resource kit from July and can't find any examples.. am I blind?
Nick Caro Senior Desktop Support Administrator
Phone +1 212-239-5741 Fax 212-946-4010 nick.caro at rga.com<mailto:nick.caro at rga.com>
R/GA 350 West 39th Street New York, NY 10018
www.rga.com<http://www.rga.com/> www.twitter.com/rga<http://www.twitter.com/rga> www.facebook.com/rga<http://www.facebook.com/rga>
The Agency for the Digital Age(tm)
Posted on 09-19-2011 12:04 AM
Nick I found an error in that script. Change this line:
tabletExists="system_profiler | grep WACOM"
To this:
tabletExists=system_profiler | grep WACOM
Steve Wood
Director of IT
swood at integer.com
The Integer Group | 1999 Bryan St. | Ste. 1700 | Dallas, TX 75201
T 214.758.6813 | F 214.758.6901 | C 940.312.2475
Posted on 09-19-2011 12:09 AM
Perfect timing, I was just scratching my head cause all were coming back positive.
In the Extension Attribute setup page.
* Should "Data Type" be set to String or Integer?
Nick Caro Senior Desktop Support Administrator
Posted on 09-19-2011 12:10 AM
String, since the result coming back is Yes or No.
On Mon, Sep 19, 2011 at 2:09 PM, Nick Caro <Nick.Caro at rga.com> wrote:
Steve Wood
Director of IT
swood at integer.com
The Integer Group | 1999 Bryan St. | Ste. 1700 | Dallas, TX 75201
T 214.758.6813 | F 214.758.6901 | C 940.312.2475
Posted on 09-19-2011 11:25 AM
It was a script that I had thrown together last August:
On Mon, Sep 19, 2011 at 12:35 PM, Nick Caro <Nick.Caro at rga.com> wrote:
#!/bin/sh
tabletExists="system_profiler | grep WACOM"
if [ "$tabletExists" != "" ];
then
echo "<result>Yes</result>"
else
echo "<result>No</result>"
fi
exit 0
I would double check it to see if it still works as expected.
Steve Wood
Director of IT
swood at integer.com
The Integer Group | 1999 Bryan St. | Ste. 1700 | Dallas, TX 75201
T 214.758.6813 | F 214.758.6901 | C 940.312.2475
Posted on 09-19-2011 11:31 AM
Many thanks!
I appreciate it the help.
Nick Caro Senior Desktop Support Administrator
Posted on 09-21-2011 12:00 AM
Cool! Well, at least, I imagine with a pair of Oakleys I would be cooler than with a bunch of sed lines :)
Sean
Posted on 09-21-2011 12:14 AM
You'd imagine...
;P
Regards,
Ben.
Posted on 09-21-2011 12:19 AM
Or a pair with a SED line etched into them.
------------------------------
Tom Tubbiola
Special Technical Services (STS Team)
Ttubbiola at oakley.com
949.900.7705
Posted on 09-21-2011 12:35 AM
naw, he needs this etched into it
chown -R us /.base
it is a clever geeky unix joke
Posted on 09-21-2011 12:40 AM
Just googled it.
Yep I was right... Do I win a coconut or something?
Regards,
Ben.
Posted on 09-21-2011 12:41 AM
Somebody set us up the *.bom.
--
BKV
Posted on 09-21-2011 09:32 AM
You may find this useful!
Sean
#!/bin/bash
echo -n "<result>"
system_profiler SPUSBDataType | grep -B 3 -i wacom | awk 'NR%5==1' | sed -e 's/^[ ]//' | #sed -e 's/USB Bus://' | #sed -e 's/USB High-Speed Bus://' | sed -e 's/XD-0405-U/Intuos2 A6/g' | sed -e 's/XD-0405-R/Intuos2 A6/g' | sed -e 's/XD-0608-U/Intuos2 A5/g' | sed -e 's/XD-0608-R/Intuos2 A5/g' | sed -e 's/XD-0912-U/Intuos2 A4/g' | sed -e 's/XD-0912-R/Intuos2 A4/g' | sed -e 's/XD-1212-U/Intuos2 A4 Oversize/g' | sed -e 's/XD-1212-R/Intuos2 A4 Oversize/g' | sed -e 's/XD-1218-U/Intuos2 A3/g' | sed -e 's/XD-1218-R/Intuos2 A3/g' | sed -e 's/PTZ-430/Intuos3 A6/g' | sed -e 's/PTZ-431W/Intuos3 A6 Wide/g' | sed -e 's/PTZ-630/Intuos3 A5/g' | sed -e 's/PTZ-631W/Intuos3 A5 Wide/g' | sed -e 's/PTZ-930/Intuos3 A4/g' | sed -e 's/PTZ-1230/Intuos3 A4 Oversize/g' | sed -e 's/PTK-440/Intuos4 S/g' | sed -e 's/PTK-640/Intuos4 M/g' | sed -e 's/PTK-840/Intuos4 L/g' | sed -e 's/PTK-1240/Intuos4 XL/g' | sed -e 's/CTH-460/Bamboo Pen&Touch/g' | sed -e 's/CTH-461/Bamboo Craft/g' | sed -e 's/CTH-661/Bamboo Fun Pen&Touch/g' | sed -e 's/DTZ-1200W/Cintiq-12WX Intuos3/g' | sed -e 's/DTZ-2100/Cintiq-21UX Intuos3/g' | sed -e 's/DTK-1200W/Cintiq-12WX Intuos4/g' | sed -e 's/DTK-2100/Cintiq-21UX Intuos4/g' | sed -e '/^$/d' | sed -e 's/(.)./1/'
echo "</result>"
Posted on 09-21-2011 09:36 AM
W o W !!!
That is awesome!
Thank you.
Nick Caro Senior Desktop Support Administrator
Posted on 09-21-2011 09:39 AM
:)
Posted on 09-21-2011 09:52 AM
What Nick said, thanks for this.
------------------------------
Tom Tubbiola
Special Technical Services (STS Team)
Ttubbiola at oakley.com
949.900.7705
Posted on 09-21-2011 09:56 AM
Wow is right!
So we just add the ext attribute as a script and string and then run
inventory recons?
John Wojda
Lead System Engineer, DEI & Mobility
3333 Beverly Rd. B2-338B
Hoffman Estates, IL 60179
Phone: (847)286-7855
Page: (224)532.3447
Team Lead DEI: Matt Beiriger
<mailto:mbeirig at searshc.com;jwojda at searshc.com?subject=John%20Wojda%20Fe
edback&body=I%20am%20contacting%20you%20regarding%20John%20Wojda.>
Team Lead Mobility: Chris
<mailto:cstaana at searshc.com;jwojda at searshc.com?subject=John%20Wojda%20Fe
edback&body=I%20am%20contacting%20you%20regarding%20John%20Wojda.> Sta
Ana
Mac Tip/Tricks/Self Service & Support
<http://bit.ly/gMa7TB>
"Any time you choose to be inflexible in your approach to an
unpredictable project you are already building failure into your plan"
Posted on 09-21-2011 10:31 AM
Don't suppose that's worth a free pair of Oakley's
;)
Sean
Posted on 09-21-2011 10:45 AM
Anything is possible. :-)
Posted on 09-21-2011 10:51 AM
haha nice sed wizardry there
Posted on 09-21-2011 11:05 AM
If I may be so bold to ask - what are the various commands? The man
page only tells so much (almost all of it over my head) - a real script
is easier to relate to why you chose particular commands over others.
I'm seeing a lot of / and 's and NR%5 ... but I don't know understand
the logic behind them. It would be good to know so as new Wacoms come
out I can continue to update the info to reflect newer hardware.
system_profiler SPUSBDataType | grep -B 3 -i wacom | awk 'NR%5==1' |
sed -e 's/^[ ]*//' |
#sed -e 's/USB Bus://' |
#sed -e 's/USB High-Speed Bus://' |
sed -e 's/XD-0405-U/Intuos2 A6/g' |
John Wojda
Lead System Engineer, DEI & Mobility
3333 Beverly Rd. B2-338B
Hoffman Estates, IL 60179
Phone: (847)286-7855
Page: (224)532.3447
Team Lead DEI: Matt Beiriger
<mailto:mbeirig at searshc.com;jwojda at searshc.com?subject=John%20Wojda%20Fe
edback&body=I%20am%20contacting%20you%20regarding%20John%20Wojda.>
Team Lead Mobility: Chris
<mailto:cstaana at searshc.com;jwojda at searshc.com?subject=John%20Wojda%20Fe
edback&body=I%20am%20contacting%20you%20regarding%20John%20Wojda.> Sta
Ana
Mac Tip/Tricks/Self Service & Support
<http://bit.ly/gMa7TB>
"Any time you choose to be inflexible in your approach to an
unpredictable project you are already building failure into your plan"
Posted on 09-21-2011 11:21 AM
there are whole books dedicated to awk and sed. They basically
manipulate text and strings and are very powerful binaries. You can do
comparisons, mathematics, regex, substitution/manipulation, and so much
more. These two commands are basically a whole programming language with
in itself. I own this book and suggest it to anyone wanting to learn
more.
http://shop.oreilly.com/product/9781565922259.do
For the geek history of it, sed stands for stream editor and awk stands
for: Aho, Weinberger and Kerrighan which are the last names of the 3
dudes that developed it. The command `grep` actually comes from sed,
because grep used to be a very popular switch used with sed to pull out
strings with in a data set, g/re/p was a common string in sed, which
was for global regular expression print. Thankfully wikipedia is
around to teach me these things!
-Tom
Posted on 09-21-2011 11:52 AM
If you have more than one device connected (some of our users have Cintiqs and standard tablets) then you'd have an output like:
system_profiler SPUSBDataType | grep -B 3 -i wacom
XD-0608-U:
Product ID: 0x0042 Vendor ID: 0x056a (WACOM Co., Ltd.) -- PTZ-630:
Product ID: 0x00b1 Vendor ID: 0x056a (WACOM Co., Ltd.)
awk 'NR%5==1'
lists the 1 line of each block of 5
So
system_profiler SPUSBDataType | grep -B 3 -i wacom | awk 'NR%5==1' XD-0608-U: PTZ-630:
If you ran
awk 'NR%5==3' instead
then you'd get every 3rd line of output of each block of 5
system_profiler SPUSBDataType | grep -B 3 -i wacom | awk 'NR%5==3' Product ID: 0x0042 Product ID: 0x00b1
sed -e 's/^[ ]*//'
remove leading whitespace
These are hashed out, so aren't doing anything anymore
#sed -e 's/USB Bus://'
#sed -e 's/USB High-Speed Bus://'
but they are replacements. So
sed 's/hello/goodbye/'
will replace the first hello with goodbye
whilst sed 's/hello/goodbye/g'
will remove all instances of hello with goodbye
So from all of that,
s ed -e 's/XD-0405-U/Intuos2 A6/g'
replaces " XD-0405-U" with " Intuos2 A6" (notice the back slash to escape spaces)
Then | (pipe) one line into the next.
Rather that having one massive list though, you can use and then return to a new line to make it neater.
So,
system_profiler SPUSBDataType | grep -B 3 -i wacom | awk 'NR%5==1' | sed -e 's/^[ ]*//'
Is the same as writing
system_profiler SPUSBDataType | grep -B 3 -i wacom | awk 'NR%5==1' | sed -e 's/^[ ]*//'
Google sed or awk oneliners. Very useful pages to start with.
I do the same with SDI/HD Video IO cards too. Which reminds me, I need to check out the unknowns!
#!/bin/bash
echo -n "<result>"
system_profiler SPPCIDataType | grep -B 2 "Type: Video" | sed 's/ //g' | grep '^pci' | sed -e 's/pci10b5,a100:/Decklink Pro/' | sed -e 's/pcibdbd,a11b:/Decklink SDI/' | sed -e 's/pcibdbd,a117:/Decklink Intensity Pro/' | sed -e 's/pcif1d0,c0ff:/AJA Kona 3/' | sed -e 's/pcibdbd,a121:/Unknown/' | sed -e 's/pcibdbd,a10b:/Blackmagic Unknown/'
echo "</result>"
Sean
Posted on 09-21-2011 02:29 PM
sed 's/My shades/Oakleys/g'
:)
Posted on 09-22-2011 10:02 AM
Sean,
Kudos for both the script and the explanation; my sed IQ has increased exponentially!
One question: if a computer does have more than one Wacom device connected, then how does it populate the Extension Attribute (I am trying to visualize how each device would be a separate variable if it populates a single attribute)?
Thanks again!
Sean~~~~~~~~~
Sean Alexander
Desktop Analyst
Macintosh Services Delivery
Lockheed Martin - Enterprise Business Services~~~~~~~~~
Posted on 09-23-2011 03:14 AM
The script output in Casper has a return <BR> that the Extension Attribute obeys and each item will appear in a list. I do a similar thing for graphics cards and I get:
Graphics Card: ATI Radeon HD 4870 NVIDIA Quadro 4000
Disappointingly, if you view this on the main Inventory page, then you get a display like:
ATI Radeon HD 4870<BR>NVIDIA Quadro 4000
since this page isn't obeying the return. I've put in a bug fix, but unless it is in the very latest build, Jamf still haven't fixed this. Anyone else annoyed by this please add a bug report to get it fixed.
So it is one variable, but each item is separated by a return. In fact, the appearance of multiple lines in Extension Attributes was better in version 7.x, as the Title would appear in line with the top item. They have changed this to centre, making our memory one look like:
Memory Banks: DIMM 1: 2 GB 0x26302779 DIMM 2: 2 GB 0x2690277B DIMM 3: Empty Empty DIMM 4: Empty Empty DIMM 5: 2 GB 0x2690272A DIMM 6: 2 GB 0x26202770 DIMM 7: Empty Empty DIMM 8: Empty Empty
When this is in a list of attributes that each have several lines, it isn't the easiest to read. Put in a feature request to revert the style sheet, but again no change yet. Report this too, go on!
No doubt both of these display issues are in style sheets on the server that I could edit, but then each update would mean re-writing their style sheet each time.
Sean
Posted on 09-23-2011 04:11 AM
Hi Sean,
We've got an Extension Attribute that returns MUD sizes. Ran into the same problem. The output is a nearly non-readable blob for our techs and analysts....
CURRENT RESULT:
jdoe 23M /Users/jdoe/Documents/Microsoft User Data/Office 2008 Identities/Main Identity/Database<BR>asmith 258M /Users/asmith/Documents/Microsoft User Data/Office 2004 Identities/asmith/Database<BR>bjones 21M /Users/bjones/Documents/Microsoft User Data/Office 2008 Identities/Main Identity/Database
DESIRED RESULT:
jdoe 23M /Users/jdoe/Documents/Microsoft User Data/Office 2008 Identities/Main Identity/Database
asmith 258M /Users/asmith/Documents/Microsoft User Data/Office 2004 Identities/asmith/Database
bjones 21M /Users/bjones/Documents/Microsoft User Data/Office 2008 Identities/Main Identity/Database
We reported this to JAMF about a year or so ago, but I'll ping them to support your bug report. Extension Attributes are incredibly useful (best thing since dummy receipts!) and as our techs and analysts rely more and more on this kind of inventory data, it gets more and more crucial to get the <BR> issue resolved.
Don
Posted on 03-01-2012 05:48 AM
sed -e 's/XD-0405-U/Intuos2 A6/g' | sed -e 's/XD-0405-R/Intuos2 A6/g' | sed -e 's/XD-0608-U/Intuos2 A5/g' | sed -e 's/XD-0608-R/Intuos2 A5/g' | sed -e 's/XD-0912-U/Intuos2 A4/g' |
Sean,
Where did you find these to list them out?
Posted on 03-01-2012 08:04 AM
My list came from a couple of sources. Some would be tablets we already had and others were I think probably from wacoms website. Do you think they are wrong?
Think I may have pulled the model codes from:
http://www.wacom-asia.com/download/manuals/index.html
Posted on 03-01-2012 04:25 PM
Once again Sean is the sed wizard, thanks again for the display output attribute!
I can't give you free gear but I'll gladly give you a Columbia Sportswear employee pass, contact me off board and we can exchange info! Twitter feed URL is in profile.
I will add this to our attribute list tomorrow!
Posted on 03-20-2012 12:58 PM
If you haven't seen it in one of the most recent JAMF Nation digests Sean updated a separate thread with a fix, posting this here for archive purposes and for any new comers.
For anyone that hasn't noticed yet, the new wacom tablet reports the correct name, so no need to amend my EA script to do more replacements. However, the grep for wacom now comes up with a false positive. Easy fix, just change the line: system_profiler SPUSBDataType | grep -B 3 -i wacom | awk 'NR%5==1' | to read: system_profiler SPUSBDataType | grep -B 3 WACOM | awk 'NR%5==1' | Sean
Posted on 04-06-2012 11:46 AM
Hmm with casper 8.43 this worked, After I got 8.51 loaded this is now broken.
/private/tmp/extensionAttributeScript: line 7: : command not found
Posted on 10-05-2018 05:53 AM
Hello everyone, resurrecting a very old thread...
I was wondering if any kind soul had an updated script/extension attribute to collect Wacom tablets on inventory.
I could not find anything related on Jamf Nation
I have tried the above but does not seem to work on 10.13.6
Many thanks and have a great weekend everyone!
Carlo
Posted on 10-05-2018 06:59 AM
@carlo.anselmi I didn't look at the whole thread, but the one a few comments above by @adthree still works for me in 10.13.6:
#!/bin/sh
system_profiler SPUSBDataType | grep -B3 -i wacom | awk 'NR%5==1'
I left off the pipe (|) and backslash () at the end of that as I ran that command independently. Those are needed if you are continuing the command onto another line.
For me, this resulted in an output of
Intuos PS:
Version: 1.00
You'd have to echo that result to fill in the extension attribute, of course.
You know, I don't have this in my environment but I might just implement it.
Posted on 10-05-2018 07:24 AM
I've looked over @sean's stuff.
He is obviously (was obviously) working with computers that had multiple tablets connected and he needed to know which tablets were on which computer.
Where I am, that is definitely not an issue for me.
As such, a simpler EA could just be to return True or False if a tablet is connected.
#!/bin/bash
result="False"
# If the result of this command is not null (-n), then a Wacom tablet was found.
if [[ -n "$(system_profiler SPUSBDataType | grep -i wacom)" ]]; then
result="True"
fi
echo "<result>$result</result>
If you need the model name, you could do something like this:
#!/bin/bash
result="No tablet connected"
# Get the USB data from system_profiler, then search (regex) for Wacom. Grab the first entry (head -1) and remove the leading whitespace and trailing colon (2 sed commands).
result="$(system_profiler SPUSBDataType | grep -B3 -i wacom | head -1 | sed "s/^[ ]*// | sed "s/:$//")"
echo "<result>$result</result>"
Alternatively, possibly to address Sean's initial workflow, you could get additional models.
NOTE: I haven't tested this on an actual machine, just in simulated input.
#!/bin/bash
result="No tablet connected"
# Get the USB data from system_profiler, then search (regex) for Wacom. Grab the first line of each entry (2 awk commands) and remove the leading whitespace and trailing colon (2 sed commands).
# The first awk is based on Sean's script. The output is broken down into 5 line chunks and he is pulling the first line of those chunks.
# That gives you the model name and version number per each device connected.
# The second awk gives you just the model name per each device connected. (2 line chunks getting the first line of each).
result="$(system_profiler SPUSBDataType | grep -B3 -i wacom | awk 'NR%5==1' | awk 'NR%2==1' | sed "s/^[ ]*//" | sed "s/:$//")"
echo "<result>$result</result>"
Posted on 10-05-2018 09:15 AM
@jrippy
Awesome! Where can I send you some beer? :-)
I am testing the last script and it reports back the commercial name and/or model (like CTL-something) correctly
Waiting for all clients to run recon, so far I have only a couple of machines I need to manually double check since the result is
Current Required (mA): 20 Serial Number: ############
(#s above are numbers)
Anyway, thank you again!
Have a great weekend everyone
Carlo
EDIT: maybe those are "false positive" and just external USB drives?
Posted on 10-05-2018 09:20 AM
I'm still using this with hosted 10.7.1, works fine as best I can tell:
#!/bin/sh
# updated to take advantage of less than operator when reporting integer as result instead of string
# but that didn't work since the value reports with two decimal points and a hyphen, i.e. "6.3.27-2"
version=$(/usr/bin/defaults read /Library/PreferencePanes/WacomTablet.prefpane/Contents/Info.plist CFBundleShortVersionString | sed 's/Wacom v//g')
echo "<result>$version</result>"
Posted on 10-05-2018 09:38 AM
@carlo.anselmi It could be that some of those are wireless adapters for tablets, perhaps?
Some of the numbers with awk might need to be adjusted. Take the command and just remove the pipes and extra commands after the grep statement and you can see what the full output would be, then maybe adjust accordingly.
@pete_c That works great if the software is installed (and it should be). I have noticed these tablets still work as input devices without software as well. I guess it depends on the needs for the EA. You could theoretically scope the software install based on the EA output so you might want the output from system_profiler.
But if you guarantee that the software is installed, that should be awesome and easier.
Posted on 10-19-2018 01:48 AM
@jrippy and @pete_c and @sean
many thanks indeed, sorry for the delay in getting back
Putting all together now I can collect the tablet model name with
#!/bin/bash
result="No tablet connected"
# Get the USB data from system_profiler, then search (regex) for Wacom. Grab the first line of each entry (2 awk commands) and remove the leading whitespace and trailing colon (2 sed commands).
# The first awk is based on Sean's script. The output is broken down into 5 line chunks and he is pulling the first line of those chunks.
# That gives you the model name and version number per each device connected.
# The second awk gives you just the model name per each device connected. (2 line chunks getting the first line of each).
result="$(system_profiler SPUSBDataType | grep -B3 -i wacom | awk 'NR%5==1' | awk 'NR%2==1' | sed "s/^[ ]*//" | sed "s/:$//")"
echo "<result>$result</result>"
Then the model identifier (code name) with
#!/bin/bash
echo -n "<result>"
system_profiler SPUSBDataType | grep -B 3 -i wacom | sed -e 's/^[ ]*//' | awk 'NR%5==1' |
#sed -e 's/USB Bus://' |
#sed -e 's/USB High-Speed Bus://' |
sed -e 's/XD-0405-U/Intuos2 A6/g' |
sed -e 's/XD-0405-R/Intuos2 A6/g' |
sed -e 's/XD-0608-U/Intuos2 A5/g' |
sed -e 's/XD-0608-R/Intuos2 A5/g' |
sed -e 's/XD-0912-U/Intuos2 A4/g' |
sed -e 's/XD-0912-R/Intuos2 A4/g' |
sed -e 's/XD-1212-U/Intuos2 A4 Oversize/g' |
sed -e 's/XD-1212-R/Intuos2 A4 Oversize/g' |
sed -e 's/XD-1218-U/Intuos2 A3/g' |
sed -e 's/XD-1218-R/Intuos2 A3/g' |
sed -e 's/PTZ-430/Intuos3 A6/g' |
sed -e 's/PTZ-431W/Intuos3 A6 Wide/g' |
sed -e 's/PTZ-630/Intuos3 A5/g' |
sed -e 's/PTZ-631W/Intuos3 A5 Wide/g' |
sed -e 's/PTZ-930/Intuos3 A4/g' |
sed -e 's/PTZ-1230/Intuos3 A4 Oversize/g' |
sed -e 's/PTK-440/Intuos4 S/g' |
sed -e 's/PTK-640/Intuos4 M/g' |
sed -e 's/PTK-840/Intuos4 L/g' |
sed -e 's/PTK-1240/Intuos4 XL/g' |
sed -e 's/PTK-450/Intuos5 touch Small/g' |
sed -e 's/PTH-650/Intuos5 touch Medium/g' |
sed -e 's/PTH-850/Intuos5 touch Large/g' |
sed -e 's/CTH-460/Bamboo Pen&Touch/g' |
sed -e 's/CTH-461/Bamboo Craft/g' |
sed -e 's/CTH-661/Bamboo Fun Pen&Touch/g' |
sed -e 's/CTL-470/Bamboo Connect/g' |
sed -e 's/CTL-471/Bamboo Splash/g' |
sed -e 's/CTH-470/Bamboo Capture/g' |
sed -e 's/CTH-670/Bamboo Create/g' |
sed -e 's/DTZ-1200W/Cintiq-12WX Intuos3/g' |
sed -e 's/DTZ-2100/Cintiq-21UX Intuos3/g' |
sed -e 's/DTK-1200W/Cintiq-12WX Intuos4/g' |
sed -e 's/DTK-2100/Cintiq-21UX Intuos4/g' |
sed -e '/^$/d' |
sed -e 's/(.*)./1/'
echo "</result>"
and the driver version with
#!/bin/sh
# updated to take advantage of less than operator when reporting integer as result instead of string
# but that didn't work since the value reports with two decimal points and a hyphen, i.e. "6.3.27-2"
version=$(/usr/bin/defaults read /Library/PreferencePanes/WacomTablet.prefpane/Contents/Info.plist CFBundleShortVersionString | sed 's/Wacom v//g')
echo "<result>$version</result>"