[Nook HD, HD+ General] N00b-un-2:
methods for booting a full linux distro on phones and tablets have existed nearly as long as Android itsself, and they almost always involve running a VNC server on a chrooted linux install and a VNC client on the host system. And the results were always virtually unusable because of how slowly it would run.

depending on what hardware your android device has, linux drivers have been included in the kernel recently enabling access to the graphics framebuffer on many common android systems.

Using the info found here as a starting point, I've adapted this to work on the Nook HD+ (and I'd imagine it would work relatively the same on the HD).

1) install Cyanogenmod

The stock firmware just isn't going to hack it. You're going to need a full Android system with a modern kernel in order to chroot into a "guest" Linux system.

2) Partition your sdcard

now, this is arguably not necessary but at a bare minimum, Linux requires a native filesystem, eg; Ext4. Yes, it could be argued that you could create a space for your Linux install on the EMMC, but for my purposes I used an ext4 partition on an external SD card.

There are quite a few ways that you can partition your SD card. The easiest would be to just do it using either CWM or TWRP. But, seeing as how you're going to need to mount the SD card on a computer in order to get a Linux system onto the new ext partition, you might as well just do it using Gparted, Disks (aka Palimpsest) or other Linux partitioning software.

I'm doing it from my macbook using OSXFuse and FUSE-ext2, so... there is more than one way to skin a cat.

3) "install" Linux

Instead of taking the time to grab one of the ARM netboot images of some distro and taking the time to build a system using Qemu (since at this point I don't have a working Linux install on my tablet), I figured it would be much easier to just download a premade system image that's already configured to run on Android... the ones I mentioned earlier when discussing accessing a host system via VNC.

Debian is my distro of choice and the "Linux-on-Android" project hosts preconfigured Debian-ARM builds. WIN! Grab the latest image (v4 at the time of writing) here:

http://sourceforge.net/projects/linuxonandroid/files/Debian/Image/Small/

Unzip the file. inside will be disk image named 'debian.img'. Mount the disk image. On Mac OS X, you can just double click the image and it will be mounted. On Linux you have a little more work to do.

sudo -s
mkdir -p /mnt/debian
mount -o loop -t ext2 /path/to/debian.img /mnt/debian

once the image is mounted, you need to copy all files from the disk image to your ext4 partition. This will have to be executed AS ROOT (sudo will NOT cut it) and you need to make sure to preserve file attributes, ownership and permissions while copying. The command will be

su
cp -vpR /mnt/debian/ /path/to/ext4partition

This is going to take a VERY long time. Even though it's less than 2gb of data, it is hundres of thousands of individual files which take a long time to process.

One the cp completes, you will be almost ready to put the card into your Nook HD+ and fire up some Linux

4) Modify xorg.conf

first and foremost you need to modify your /etc/X11/xorg.conf as follows

Section "ServerLayout"
Identifier	"Layout0"
Screen	"Screen0"
InputDevice	"Touchscreen0" "CorePointer"
InputDevice "Mouse0" "CorePointer"
InputDevice	"Keyboard0" "CoreKeyboard"
EndSection

Section "InputDevice"
Identifier "Touchscreen0"
Driver	"evdev"
Option	"Device"	"/dev/input/event2"
EndSection

Section "InputDevice"
Identifier	"Mouse0"
Driver	"evdev"
Option	"Device"	"/dev/input/event4"
Option	"Protocol"	"usb"
EndSection

Section "InputDevice"
Identifier	"Keyboard0"
Driver	"evdev"
Option	"Device"	"/dev/input/event5"
Option	"Protocol"	"usb"
EndSection

Section "Device"
Identifier	"Card0"
Driver	"fbdev"
Option	"fbdev" "/dev/graphics/fb0"
VendorName	"Unknown"
BoardName	"Unknown"
EndSection

Section "Screen"
Identifier	"Screen0"
Device	"Card0"
DefaultDepth 24
SubSection "Display"
Depth	24
Modes	"1024x600_60.00"
EndSubSection
EndSection

Section "ServerFlags"
Option "AutoAddDevices" "false"
EndSection

5) Script to launch Linux

I've never had any luck running these commands from the Nook itsself, it must be done via ADB shell.

setprop ctl.stop media
setprop ctl.stop zygote
setprop ctl.stop surfaceflinger
setprop ctl.stop drm
stop bootanim
mount -o remount, rw /
mkdir /mnt/linux
mount -t ext4 /dev/block/mmcblk1p2 /mnt/linux
export mnt=/mnt/linux
mount -o bind /dev $mnt/dev
mount -t devpts devpts $mnt/dev/pts
mount -t proc none $mnt/proc
mount -t sysfs sysfs $mnt/sys
export PATH=/sbin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:$PATH
export TERM=xterm
export HOME=/root
export USER=root
chroot $mnt /bin/bash
startx &

the first five commands kill conflicting Android processes, not the least of which being the Android framebuffer. Then the root directory is mounted as read/write, a temporary directory '/mnt/linux' is created (it will need to be recreated every time the tablet reboots), and then assuming your sdcard's ext4 partition is the second partition (mmcblk1p2) is mounted to the new directory, various system components are bound to the host system, a chroot environment is created and chrooted into, and finally, the Xserver is kicked off. In a few seconds, you will see the XFCE desktop begin loading on your Nook HD+.

A few notes/caveats:

although configured what I deem to be correctly, the touchscreen is not working. Strangely enough, if you issue the command

od of /dev/input/event2, you will see debug information kicked to stdout when touching the screen, so the evdev driver sees the touchscreen, but something is not quite right. For now, you can use a female to female USB adapter with the Nook's proprietary plug to connect a usb keyboard and mouse. AFAIK, USB host mode is included and works OOB on the Cyanogenmod kernel.

Since I don't own such an adapter, I've only been able to connect to the system using x11vncserver. by default, I think tightvncserver is installed and configured to use DISPLAY:1 (configured this way for the older VNC only method). After the first time, you should be able to set up some other solution like x2x or synergy in lieu of a USB keyboard and mouse.

I've had no luck getting a connected bluetooth keyboard to work with this setup. perhaps once booted and connected to the debian system installing the Linux bluetooth stack will enable full bluetooth connectivity?