24th October 2007
Recently, I installed Debian Etch 4.0r1 onto my laptop. However, after the first boot into plain console, computer was dead-frozen after some console usage. I rebooted using the Power button – this time to gdm; and again, after some keyboard input system was hanging dead.
I found the reason at debianhelp.org forums. Basically, it’s the PC speaker module (pcspr) not functioning correctly. I suspect this problem manifests itself only on some types of laptops. The solution is either to somehow reconfigure the pcspkr module, or just disable it. More on how to disable the module below.
First of all, boot into console-only mode or even single-user mode. On my install GRUB loader, configured by the Debian Installer, had an option in the boot menu to boot into single-user mode.
Remember, that any sound emission attempt will freeze your computer in this scenario. So avoid any actions, which might generate a system beep. These actions include (but are in no way limited to): using TAB filename/command autocompletion, using up/down arrows in command line when there is nothing in the history above or below the current command, etc.
After successfully booting, remove the pcspkr module: modprobe -r pcspkr (if that doesn’t work, try rmmod pcspkr). Note, that this command only removes pcspkr module for the current session, and the module will be loaded again on next boot.
To permanently disable the pcspkr module, you can blacklist it. To do so, add the line blacklist pcspkr to the /etc/modprobe.d/blacklist.local file. If this file does not exist, you can create it.
On my system I already had /etc/modprobe.d/blacklist file, so I also added blacklist pcspkr line to that file. I did not check which one actually worked for me, but on the next boot pcspkr didn’t load.
I also did one more thing – configured console not to beep. This is done in /etc/inputrc file by uncommenting the following line: set bell-style visible (or you can uncomment set bell-style none to have absolutely no bell notifications).
There’s also a method to disable IPv6 module, which can be adopted for the pcspkr module. However, I didn’t use it – methods listed above helped me.