Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
Having installed Ubuntu 12.04 on that Lenovo box, which has an nVidia graphics chip, we find there’s an error somewhere inside the current 295.40 (and perhaps previous versions) of the proprietary nVidia driver that causes random video lockups which generally require rebooting that sucker. Of course, the default Unity desktop requires that driver for 3D operations like compositing, because the Free Software drivers don’t / can’t do 3D in hardware.
How is it that a (nominally) Open Source / Free Software OS requires proprietary drivers just to present the UI? Oh, right, 3D is glitzy and that’s what matters most in these degenerate days.
Anyhow.
The least-likely-to-fail solution seems to be disabling the nVidia driver, which enables the Nouveau driver, which does 2D just fine, which lets Unity stumble along. Reverting to 295.33 seems to work for some folks, but I have other things to do…
The default Grub2 video mode for Ubuntu 12.04 is 640×480, which looks rather overwhelming on a 24 inch monitor that can do 1920×1600. I’m also a fan of Old Skool scrolling text, because when something goes wrong it’s handy to get an actual hint in real time.
Thus, some Grub tweakage was in order:
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
... snippage ...
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
#GRUB_GFXMODE=1600x1200
GRUB_GFXMODE=1280x1024
AFAICT, it’s impossible to:
Page(*) the output of the Grub vbeinfo command. A blind stab at 1600×1200 turned out to be too small and painfully slow at scrolling in graphics mode.
Boot a text-mode console in anything other than 80 characters x 24 rows, so un-commenting the GRUB_TERMINAL line isn’t helpful.
This being Grub2, you must do this special dance (anybody remember when one of Grub’s advantages over Lilo was that it didn’t require a special dance?) to make it work:
sudo nano /etc/default/grub
... make changes & save ...
sudo update-grub
sudo reboot ; exit
That’s from an SSH session across the room, of course…
Incidentally, shutting off the graphic drivel immediately revealed that those NFS mounts weren’t happening because statd wasn’t running. Knowing that immediately would have saved some diagnostic time, yes, it would.
(*) The Official Grub2 doc suggests set pager=1, but there’s no way to discover that using help set at the Grub2 command line. Now we both know and maybe we’ll remember it for the next time.
Back in the old days, the Unix startup sequence was rigidly fixed. For a variety of reasons, that’s no longer the case; Ubuntu (and, presumably, other distros) now use upstart, which turns the startup sequence into a lightly documentedPachinko machine. This parallel processing presumably works great for most of Ubuntu’s use cases and falls flat on its face for me: I’m apparently the only person who expects NFS mounts to be in place before signing in.
Well, maybe otherfolks expect that, but the entire startup mechanism is apparently broken as designed.
The only solution seems to be stalling the user sign-on screen by jamming the display manager until the NFS client hauls itself to its feet. This takes up to a minute, for reasons I do not understand, but it’s better to let it run to completion rather than signing on and expecting one’s files to be in the right places. Email clients, in particular, have difficulty coping with missing files.
The fix involves adding a line to /etc/init/lightdm.conf, as mentioned there (albeit with incorrect syntax):
start on ((filesystem
and runlevel [!06]
and started dbus
and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
or stopped udev-fallback-graphics)
and mounted MOUNTPOINT=/mnt/bulkdata)
or runlevel PREVLEVEL=S)
I tried to check for another filesystem that should also be mounted, but, as I understand neither the syntax nor the semantics of the language, what you see is what finally worked. As it turns out, upstart's syntax error messages aren’t particularly helpful; a single line (helpfully relating, perhaps, that the parser expected a token on line 16) appears on VT 7, but if you don’t know to switch from VT 1, you’ll never get even that minimal assistance. No, such errors don’t appear in the /var/log/upstart/* logs.
For unknown reasons, waiting for the remote-filesystems event didn’t delay the startup at all. Evidently, mountall emits that event almost immediately, long before the NFS mounts happen. Perhaps the event occurs even when the mount fails, contrary to what the doc suggests?
Most of the debugging occurred through an ssh session across the room. Edit the file, try a new version, reboot, watch for the filesystems to come up, watch for the sign-in screen to appear. Or not, as the case may be.
Grumpy though I may seem, the great thing about Open Source / Free Software is that when it breaks, you have access to all the pieces and can actually fix the problem. That makes up for nearly everything, I’d say.
No, I didn’t update any of those bug reports or start another one. It’s obvious this isn’t getting any attention, so what’s the point? If you’re also having the problem, you’ll eventually wind up here…
FWIW, I knew the NFS mounts weren’t working because I always set the screen background to an image on the file server: no mount = no picture = fix-the-problem-now. This image seemed appropriate:
So an email made its way through all the spam filtering:
From: USPS Service <us@usps.com>
Reply-To: USPS Service <us@usps.com>
To: (me)
Subject: Failure to deliver
Notification,
Your parcel can’t be delivered by courier service.
Status:The size of parcel is exceeded.
LOCATION OF YOUR ITEM:Riverside
STATUS OF YOUR ITEM: not delivered
SERVICE: One-day Shipping
:U954571533NU
INSURANCE: Yes
Label is enclosed to the letter.
Print a label and show it at your post office.
Information in brief:
If the parcel isn’t received within 30 working days our company will have the right to claim compensation from you for it’s keeping in the amount of $12.70 for each day of keeping of it.
You can find the information about the procedure and conditions of parcels keeping in the nearest office.
Thank you for your attention.
USPS Customer.
It had, of course, an attachment: Zip archive attachment (Label_Parcel_USPS_ID.45-123-14.zip)
Not having sent a package using “one-day shipping” (which the USPS would call Express Mail), this seemed odd, as did the somewhat stilted phrasing.
We all know how this is going to work out, but let’s do the exercise anyway.
Save the ZIP attachment in /tmp, then …
Apply ClamAV: run freshclam to update the virus signatures and fire clamscan at the ZIP file:
/tmp/Label_Parcel_USPS_ID.45-123-14.zip: OK
----------- SCAN SUMMARY -----------
Known viruses: 1201128
Engine version: 0.97.3
Scanned directories: 0
Scanned files: 1
Infected files: 0
Data scanned: 0.04 MB
Data read: 0.02 MB (ratio 2.00:1)
Time: 7.549 sec (0 m 7 s)
Huh. Well, then, it must be safe, right? (The alert reader will note that my version of clamav is one click back from the latest & greatest. Maybe that would make a difference. Probably not.)
Obviously, this blob of slime arrived still warm from the oven: even though the Big Name AV checkers have up-to-date signatures, they detect nothing wrong and would happily let me run a Trojan installer. That’s what malware protection buys you these days.
To a good first approximation, whatever virus scanner you’re using won’t save your bacon, either; the advice to keep the signatures up-to-date is necessary, but not sufficient. Of course, you know enough to not autorun random files on your Windows box, but this attack works often enough to justify sending messages to everybody in the world. Repeatedly.
I recently had a discussion with someone who wanted a system secured against email and web malware. She also insisted that it had to run Windows and share files with other Windows machines. I declined to bid on the job…
I finally broke down and bought a Kindle Fire last week, with the intent of having my accumulation of datasheets and manuals where I need them when I need them, and it works reasonably well. One ergonomic blunder: the power button stands just slightly proud of the edge:
Kindle Fire Power Button
That’s exactly where my little finger rests when I’m supporting the slab in my left hand. Past experience has also shown that any opening will admit dust that eventually accumulates behind the screen, so a small protector seemed in order:
Kindle Power Button Protector – solid model
Printed with zero added shells and 1.0 infill produced a solid block of plastic that required very little cleanup:
Kindle power button protector – as built
The zittage serves to improve the fit: the protector should require a bit of fingernail persuasion to remove.
It took two tries to get the Micro-B USB connector slab offset from the centerline just right, but eventually everything lined up correctly:
Kindle power button protector – in place
My pudgy finger squeezes into that opening just enough to turn the thing on and off, but pressing on the green plastic bar has no effect. There’s not enough plastic to allow chamfering the edge in the solid model, but a bit of riffler file action worked wonders on those sharp edges.
The OpenSCAD source code:
// Kindle Fire Power Button Protector
// Ed Nisley KE4ZNU April 2012
include </home/ed/Thing-O-Matic/lib/MCAD/boxes.scad>
//- Extrusion parameters must match reality!
// Print with +0 shells and 3 solid layers
ThreadThick = 0.25;
ThreadWidth = 2.0 * ThreadThick;
HoleWindage = 0.2;
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
Protrusion = 0.1; // make holes end cleanly
//----------------------
//- Dimensions
PlugDia = 3.5; // audio jack
PlugLength = 5.0;
PlugOffset = -10;
USBThick = 1.0; // Micro-B USB jack
USBWidth = 6.8;
USBLength = 4.0;
USBOffset = -0.25;
ButtonDia = 5.2; // power button
ButtonOffset = 10.0;
PlateWidth = 7.5;
PlateLength = 30.0;
PlateThick = 1.0;
PlateRadius = 2.0;
//----------------------
// Useful routines
module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes
Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);
FixDia = Dia / cos(180/Sides);
cylinder(r=(FixDia + HoleWindage)/2,
h=Height,
$fn=Sides);
}
module ShowPegGrid(Space = 10.0,Size = 1.0) {
Range = floor(50 / Space);
for (x=[-Range:Range])
for (y=[-Range:Range])
translate([x*Space,y*Space,Size/2])
%cube(Size,center=true);
}
//-------------------
// Component parts
//-------------------
// Build things...
ShowPegGrid();
union() {
translate([PlugOffset,0,0])
cylinder(r=PlugDia/2,h=(PlugLength + PlateThick),$fn=8);
translate([0,USBOffset,(PlateThick + USBLength)/2])
cube([USBWidth,USBThick,(PlateThick + USBLength)],center=true);
difference() {
translate([0,0,PlateThick/2])
roundedBox([PlateLength,PlateWidth,PlateThick],PlateRadius,true,$fn=4*4);
translate([ButtonOffset,0,-Protrusion])
rotate(360/(2*8))
PolyCyl(ButtonDia,(PlateThick + 2*Protrusion));
}
}
Perhaps this indicates most folks can’t configure network encryption with known parameters, but advising everybody to just turn that pesky WEP stuff off seems, well, misguided:
Disable WEP
Sniffing a guest’s private bits from an unencrypted link doesn’t pose any challenge at all and, given the hotel’s location in Hartford’s hot urban core, I’d expect absolutely no security-by-obscurity whatsoever.
On the other paw, Dragorn of Kismet points out the triviality of a man-in-the-middle WiFi attack no matter what encryption you might (think you) have in effect. So maybe it doesn’t make much difference.
And if you think the wired network is inherently more secure, that should change your mind.
A week or so ago, the scroll ring on the Kensington Expert Mouse trackball at my left hand failed completely. Unlike the previousrepair attempts, tweaking the IR emitter-detector pair positions did nothing. Tried it on three different PCs and five different operating systems with the same result: the ring stayed dead.
Fortunately, this one was a warranty replacement for the dead Unit 1 I bought some years back and was still within its 5 year warranty, so when I contacted Kensington tech support with the story they immediately shipped a replacement. It just arrived and works fine.
The scroll ring detents seem much smoother on this one, so I haven’t taken it apart to remove the magnetic latch and don’t know if they’re using a different quadrature sensor. One can but hope.
Kensington Expert Mouse – ball bearing
For what it’s worth, an absolutely brand new ball barely moves on those three jeweled bearings (one marked with the yellow oval in the picture). Just rub the ball on one side of your nose to add some skin oil: shazam it spins like glass on ice.
They don’t mention that trick anywhere in the meager instructions…
Update: Eight years in the future, a real fix appears!