Fn клавиши перестали работать на Lenovo Thinkpad Edge с Debian

Однажды на моем рабочем ноуте Lenovo Thinkpad Edge 15 внезапно 🙂 перестали работать ВСЕ функциональные клавиши (регулировка яркости, громкости, управление камерой и микрофоном, wi-fi). Я не гуру в низкоуровневом Linux и всяких там acpi events… Периодически и долго пытался найти решение проблемы в интернете, но особо не зная куда копать, искал по acpi, fakekeys, Debian (установленная ОСь на ноуте)… К сожаление, не нарыл ничего. Пока однажды волей случая не набрел на замечательный форум, где было предложено неожиданное решение проблемы…
Всё дело оказалось в том, что это глючит BIOS на Lenovo Thinkpad Edge!! 🙁
Т.о., дабы вернуть состояние bios и ноута к прежнему, необходимо просто отключить питание от ноута и вытащить батарею на время около минуты или чуть больше. Это приведет к сбросу bios и acpi до состояния мо-умолчанию.
Спасибо ребятам за предложенное решение проблемы!

Как скачать аудио из ВКонтакте

Небольшой скриптец, который поможет вам создать список URL адресов mp3 файлов, который можно затем «скормить» какому-нибудь Download Master.
Сей скриптец нужно запускать в консоли FireBug (расширение к броузеру FireFox, ориентированное на программистов), находясь при этом на странице «Мои аудиозаписи».
В результате выполнения в консоль будет выведен список адресов аудифайлов вашего плейлиста. Копируете список в текстовый файл, который потом импортируете в Download Master через пункт меню File -> Import. Вуаля! Файлы качаются! Единственная проблемка — названия. Это уникальные идентификаторы файлов, а не понятные человеку слова. Хотите — переименуйте вручную, а хотите — потом можно написать скриптец, скажем на PHP, который прочитает ID3-тэги файлов и переименует файлы с использованием нормальных названий.
Собственно, сам скрипт:

var hiddenFields = document.getElementsByTagName("input");
var mp3s = [];
function getHiddenField(elem, index, collection){
    if(elem.getAttribute("type") == "hidden" && (/audio_info\d+_\d+/).test(elem.getAttribute("id"))){
        mp3s.push(elem.getAttribute("value").split(",")[0]);
    }
}
for(var i=0; i < hiddenFields.length; i++){
    getHiddenField(hiddenFields[i], i, hiddenFields);
}
console.log(mp3s.join("\n"));