Обновить

Как я «размораживал» тачпад ноутбука Acer Aspire ES1-521

Был у меня ноутбук Acer Aspire ES1-521. У ноутбука имелась возможность отключить тачпад, чтобы не мешался во время работы с клавиатурой. Делалось это по Fn + F7. Вот только тачпад после такого действа зависал намертво: повторное нажатие не помогало. Даже перезагрузка оказывалась бессильной! Единственный способ выйти из затруднительной ситуации — выключить ноутбук, подождать пару часов и включить снова.

По всей видимости, проблема в железе. Возвращать Windows я не собирался. И поэтому в ней не проверял. Обновлять BIOS (с версии 1.07) не хотелось, дабы не испортить столь ценный аппарат окончательно. Ещё надо было бы попробовать имитацию извлечения батареи (делается она продолжительным нажатием скрытой кнопочки на донышке, совсем как кнопка сброса роутера к заводским настройкам). Но что-то мне подсказывало, что без толку... Да и непрактично это.

В итоге я уверил себя в том, что временное отключение тачпада — функция полезная и заманчивая, но не жизненно необходимая.

Кроме большой проблемы, была и маленькая. Вот сидишь себе спокойно в Kali Linux с Xfce (например, в версии 2026.3), никаких сочетаний Fn + не нажимаешь. Закрываешь крышку ноутбука, открываешь, снова закрываешь и снова открываешь (по сути закрываешь крышку на экране ввода имени пользователя и пароля). А тачпад после таких манипуляций не отзывается.

Чисто интуитивно я решил глянуть на загруженные драйверы. Просматривая выданный командой lsmod | sort список сверху донизу, я заприметил модуль ядра psmouse. Выгрузил его, загрузил... О, чудо! Тачпад заработал как ни в чем не бывало. Оставалось только приурочить перезагрузку модуля к открытию крышки ноутбука.

На этом шаге мне пришлось-таки залезть в Сеть. Пришёл к такому решению, ибо асинхронное ожидание в Python я не осилил:

def listen_for_lid_open_event():
    process = subprocess.Popen(
        ['upower', '--monitor-detail'],
        stdin=subprocess.DEVNULL,
        stderr=sys.stderr,
        stdout=subprocess.PIPE)
    while not process.poll():
        raw_line = process.stdout.readline()
        decoded_line = str(raw_line, DEFAULT_ENCODING)
        lid_open = 'lid-is-closed:   no' in decoded_line
        if lid_open:
            reload_psmouse_module()

Это, собственно, перезагрузка модуля:

def reload_psmouse_module():
    exec_command(['modprobe', 
                  '--remove', 
                  '--verbose', 
                  'psmouse'])
    exec_command(['modprobe', 
                  '--verbose', 
                  'psmouse'])

Плюс вспомогательная процедурка:

def exec_command(command):
    subprocess.check_call(
        command,
        stdin=subprocess.DEVNULL,
        stdout=sys.stdout,
        stderr=sys.stderr)

Ещё один модуль. На этот раз — systemd:

[Unit]
Description=touchpad-antifreeze: Fixes glitch with non-working touchpad on some Acer laptops
After=upower.service
StartLimitBurst=2
StartLimitIntervalSec=10

[Service]
Type=simple
User=root
WorkingDirectory=/opt/touchpad-antifreeze/
ExecStart=/usr/bin/env python3 /opt/touchpad-antifreeze/touchpad-antifreeze.py

[Install]
WantedBy=multi-user.target

Сделал сборку Debian-пакета с помощью Makefile. Выложил на GitHub.

Спасибо за внимание.

P.S. Мой ноутбук работает и радует меня до сих пор :)

Теги:
Всего голосов 8: ↑8 и ↓0+11
Комментарии2

Путь к ИИ‑сингулярности

У нас было два репозитория неоттестированного вайб‑кода, семьдесят пять тяжеловесных SDD‑спецификаций, пять обмазанных смазкой харнессов, солонка, наполовину полная кастомных скиллов и забитых капслоком правил, с десяток дырявых MCP‑серверов, RAG‑база со свежевекторизованным Confluence, самодельная дощечка имаго‑кодинга и целая россыпь автономных агентов всех мастей, от безобидных автодополнялок до галлюцинирующих субагентов, ставящих пакеты со slopsquatting и втихаря сносящих боевые базы.

Не то чтобы все это было действительно нужно для поездки к ИИ‑сингулярности, но если уж начали участвовать в спуске с горы на велосипеде без седла, остановиться уже невозможно.

Единственное, что вызывало у меня настоящий животный страх, это передача ответственности за ревью самой модели. Тот самый момент, когда седьмой агент подтверждает галлюцинации шестого, потому что все тесты зеленые, и я знал, что рано или поздно мы перейдем на эту дрянь.

Нет ничего более беспомощного, безответственного и испорченного, чем IT‑команда, запустившая мультиагентный оркестр в режиме allow all.

Это критический (и слегка ехидный) обзор того, что произошло с разработкой последние пару лет.

Путь к ИИ‑сингулярности

Публикации