All device input from all devices on all Linux-based OS is all interrupt-driven. Busy waiting (active polling) for data is not used.
Windows is probably all interrupt-driven, also. (Windows has that DOS legacy hiding inside it -- polling may still happen in there.)
All of Linux works the same way. The kernel waits for interrupts, queues up the interrupts and checks the scheduler to handle the highest-priority interrupt next. Process scheduling is always lower priority than interrupt scheduling.
The keyboard interrupts are handled by a driver which buffers the information. A window manager (Gnome, for example) fetches stuff from the buffer to create a stream of keyboard interrupts.
You can buy numerous really good books on OS design that cover the relationship between device drivers and the kernel. Start with http://lwn.net/Kernel/LDD3/
Clock interrupts, BTW, are how process scheduling happens. Absent any device activity, the clock will interrupt periodically, forcing the kernel to look at the schedule, possibly changing which process is executing. A process that uses a lot of CPU has it's priority lowered. A process that does a lot of I/O spends most of it's time waiting for I/O to finish, so it's priority is raised.
Edit
Also, there are -- sometimes -- DMA devices which bypass kernel interrupt handling for block transfers of bytes. An interrupt initiates the transfer, but the device lives on the bus and accesses memory directory. Video displays, disks (and in the olden times, network devices) may be DMA. Keyboards, however, are so low volume that DMA isn't a helpful optimization.