FreeBSD и крепкий сон ноутбука
Собрал в одной статье весь практический опыт настройки засыпания и пробуждения этой системы на разных ноутбуках.
Если хотите попробовать FreeBSD на ноутбуке — точно стоит прочитать, если уже используете тогда жду ваших комментариев.
По каким принципам автор подбирает себе рабочие ноутбуки детально описано в отдельной статье, вкратце:
берется «нижний бизнесовый» аппарат, с минимумом дополнительных наворотов, затем докупается память и диски «на всю котлету» — сколько влезет внутрь.
Если есть место под второй 2'5 диск — докупается второй диск, если есть NVM-разъем - докупается NVMe-накопитель.
Таким образом получаем отличный рабочий инструмент а не разноцветную х-ню для игор, выполняющий все возложенные на него задачи.
Все мои ноутбуки с FreeBSD используются для реальной работы и повседневных задач, регулярно бывают в дороге и полевых условиях, поэтому действительно можно что-то говорить про стабильность работы, безотказность и надежность конкретных моделей — есть живая практика.
Uptime (время непрерывной работы) обычно в районе месяца, но только лишь ввиду необходимости переодически перезагружаться в другие ОС.
Которых обычно по 4-5 штук на одной моей машине.
Разработка ПО она такая — вы же не думали, будто всю работу автор делает с помощью одного единственного инструмента?
На всех ноутбуках используется текущая стабильная версия FreeBSD, на момент написания статьи это 14.3.
Общие принципы
Процессы погружения в сон и просыпания (suspend/resume) на самом деле технически сложные — представьте на минутку, что необходимо «поставить на паузу» каждое устройство и каждую запущенную программу, а затем при просыпании «вернуть все обратно».
Разумеется работает это далеко не всегда — все же FreeBSD не разрабатывалась для десктопа, не говоря уже о ноутбуках, поэтому требует отладки и подбора параметров.
Может быть ситуация, когда засыпание отрабатывает, но при попытке проснуться система зависает.
Сбой и зависание могут произойти не при первом пробуждении, а например при десятом — представляете как весело такое отлаживать?
Еще может «зависнуть» (перестать подавать признаки жизни) при пробуждении не вся система целиком, а какое-то отдельное устройство.
Может быть разное поведение при работе от батареи или от сети — вариантов много и все веселые.
Особенно если вы любите торчать за компьютером сутками, забывая во время отладки про окружающий мир.
Но вернемся к нашим электронным баранам.
Мест для настройки процессов засыпания-пробуждения по большому счету два:
это системные переменные, задаваемые через sysctl
и скрипты, отвечающие за сам процесс.
Настройки бывают глобальными, менять которые во время работы системы нельзя, в этом случае они задаются в файле /boot/loader.conf
.
Для более «гражданских» , которые можно менять во время работы используется файл /etc/sysctl.conf
и собственно команда sysctl
, но в любом случае изменение таких настроек происходит только от root.
Надо отметить, что системные настройки, имеющие отношение к ACPI и процессам засыпания-пробуждения — по большому счету «грязные хаки», меняющие поведение отдельных модулей или ядра системы ради возможности успешного засыпания или пробуждения.
Чаще всего эти настройки отвечают за принудительный сброс состояния устройства, повторную инициализацию или наоборот — за пропуск стадии инициализации при возвращении из сна.
Поскольку FreeBSD это не Ubuntu — тут не принято добавлять по отдельному «грязному хаку» на каждую модель ноутбука и затем судорожно все это поддерживать, отлавливая бесконечное количество багов при отваливающемся функционале в новых ядрах.
Вместо этого предполагается, что пользователь должен сам подобрать настройки, при которых поведение ноутбука при засыпании и пробуждении удовлетворяет его больным фантазиям.
Современное окружение
Если вы живете не в лесу с оленями и не являетесь носителем радикальных сисадминских взглядов, исключащих из системы «все ненужное» — в вашей домашней FreeBSD будут работать сервисы DBus и devd, через события в которых и будет происходить запуск процесса засыпания.
Т.е. вместо выполнения консольных команд вроде zzz
, вы (как нормальный человек) будете использовать меню, менеджер управления питанием и настройку автоматического засыпания при неактивности:
Поэтому для нормального использования настраивать стоит именно этот функционал.
ZZZ
В FreeBSD есть несколько утилит разного уровня «системности», которые используются для погружения машины в сон. К сожалению для нормального процесса засыпания отлаживать придется их все.
В противном случае могут быть «спецэффекты» когда с помощью консольной утилиты засыпание работает правильно, а из пользовательского интерфейса в графическом окружении, который отправляет события через DBus — нет.
С незапамятных времен, в FreeBSD существовал скрипт /usr/sbin/zzz
, отвечающий за погружение машины в сон одной командой, небольшой по размеру, поэтому привожу его код целиком:
#!/bin/sh # # Suspend the system using either ACPI or APM. # For APM, "apm -z" will be issued. # For ACPI, the configured suspend state will be looked up, checked to see # if it is supported, and "acpiconf -s <state>" will be issued. # # Mark Santcroos <marks@ripe.net> # PATH=/sbin:/usr/sbin:/usr/bin:/bin ACPI_SUSPEND_STATE=hw.acpi.suspend_state ACPI_SUPPORTED_STATES=hw.acpi.supported_sleep_state APM_SUSPEND_DELAY=machdep.apm_suspend_delay # Check for ACPI support if sysctl $ACPI_SUSPEND_STATE >/dev/null 2>&1; then # Get configured suspend state SUSPEND_STATE=$(sysctl -n $ACPI_SUSPEND_STATE) # Get list of supported suspend states SUPPORTED_STATES=$(sysctl -n $ACPI_SUPPORTED_STATES) # Check if the configured suspend state is supported by the system if echo "$SUPPORTED_STATES" | grep "$SUSPEND_STATE" >/dev/null; then # execute ACPI style suspend command exec acpiconf -s "$SUSPEND_STATE" else echo -n "Requested suspend state $SUSPEND_STATE " echo -n "is not supported." echo "Supported states: $SUPPORTED_STATES" fi # Check for APM support elif sysctl $APM_SUSPEND_DELAY >/dev/null 2>&1; then # Execute APM style suspend command exec apm -z else echo "Error: no ACPI or APM suspend support found." fi exit 1
Как можно заметить, тут происходит проверка как внешних аргументов, передаваемых скрипту при вызове, так и проверка на тип используемого API — ACPI или APM.
APM тут это именно название подсистемы управления питанием, не стоит путать с одноименной консольной командой, которая также из древних времен.
Весь смысл существования которой в 21 м веке — проверка из консоли уровня заряда батареи.
Но современные реалии таковы, что с APM вам уже не удастся столкнуться при всем желании (если только не ограбите музей) — APM использовался на ноутбуках в 90е и самом начале нулевых.
Даже на описываемом ниже Asus F3KE из 2007 года используется вполне современный ACPI, а не APM.
Хотя поддержка APM там тоже есть — оставлена для обратной совместимости.
В общем, ветвление логики в скрипте zzz
ради поддержки APM уже очень давно не актуально.
Помимо проверки на ACPI/APM, в скрипте есть еще проверка на «sleep state» — состояние засыпания, причем оно еще проверяется на поддерживаемость через чтение системной настройки.
Все это безусловно красиво и замечательно, но потенциально может приводить к фатальным ошибкам, а самое главное — к разному поведению при использовании zzz
и acpiconf
(см. ниже).
Поэтому я взял за правило использовать свою сокращенную версию скрипта:
#!/bin/sh PATH=/sbin:/usr/sbin:/usr/bin:/bin # execute ACPI style suspend command exec acpiconf -s 3 exit 1
Тут стоит пояснить, что актуальны для ноутбуков только состояния S3 и S4, работающего на практике S1 или S2 автор не видел ни разу.
Состояние S4 отвечает за «hibernate» (suspend to disk) — выключение устройства, с предварительным сбрасыванием состояния памяти на диск.
Нетрудно прикинуть, что если например в машине установлено 64Гб оперативной памяти — на диск будет записан файл примерно такого размера, который еще должен быть успешно записан на диск до отключения питания.
А потом считан обратно при просыпании.
Скорость этого процесса и все сопуствующие риски и сложности, вроде необходимости держать большой объем свободного места на системном разделе, думаю сможете прикинуть самостоятельно.
Короче этот самый «хибернейт» хреново работает даже в Windows, так что использовать его во FreeBSD — откровенно дурная идея.
Проще выключить ноутбук штатным способом, закрыв предварительно все приложения, если (например) низкий заряд батареи не позволяет дальше работать.
Поэтому если оставить в скрипте чтение «sleep state» из аргумента — можно налететь на то что ноутбук попытается уйти именно в хибернейт по событию из DBus.
Чаще всего такое происходит при низком заряде батареи, поскольку во многих окружениях задано поведение по-умолчанию в виде запуска «suspend to disk».
Ну и есть отличный от нуля шанс, что обратно ноутбук уже не проснется, либо процесс засыпания будет прерван и ноутбук вернется к работе, если например нехватит свободного места на диске.
Так что считаю важным жестко зашить в этом скрипте именно S3
.
acpiconf
Следующая остановка — утилита еще более низкого уровня, непосредственно погружающая машину в сон, называется acpiconf
.
Полный путь: /usr/sbin/acpiconf
.
Это уже не шелл-скрипт а полноценный бинарник, нативное приложение, которое дергает системные вызовы ОС для запуска процесса засыпания.
Именно оно вызывается из описанного выше скрипта zzz
.
По идее достаточно использовать это приложение для помещения ноутбука в сон:
acpiconf -s 3
Но вбивать такое каждый раз не очень удобно, поэтому я использую все же более короткий zzz
если вдруг понадобилось усыпить ноутбук из консоли.
rc.suspend
Теперь стоит рассказать про скрипт /etc/rc.suspend
, отвечающий во FreeBSD за погружение машины в сон по событию из devd
.
Да, его я тоже модифицировал, моя версия выглядит вот так:
#!/bin/sh # subsystem=$1 state=$2 if [ -r /var/run/rc.suspend.pid ]; then exit 1 fi echo $ 2> /dev/null > /var/run/rc.suspend.pid . /etc/rc.subr load_rc_config /bin/sync && /bin/sync && /bin/sync /bin/sleep 1 /bin/rm -f /var/run/rc.suspend.pid /usr/sbin/zzz exit 0
Ключевое отличие (помимо удаления оповещения сервисов) в том что дергается скрипт zzz
, который в свою очередь вызывает acpiconf
, но с параметром -s 3
т.е с непосредственным вызовом процесса засыпания.
А в оригинале стоял вот такой вызов:
# Notify the kernel to continue the suspend process /usr/sbin/acpiconf -k 0
Тут стоит пояснить важный нюанс.
Дело в том что параметр -k 0
на самом деле «грязный хак», позволяющий вклиниться в уже запущенный процесс засыпания, который как предполагается уже начат снаружи и вызов acpiconf -k 0
лишь дергает программный триггер, оповещающий систему что можно наконец спокойно заснуть.
На практике же вся эта космическая #банина откровенно глючит, поэтому я цинично заменил весь этот педальный цирк на дубовый zzz
.
Получив таким нехитрым образом одинаковое поведение при всех вариантах засыпания — как по событию, так и с помощью консольных команд.
Но разумеется можете попробовать самостоятельно подергать крышкой ноутбука или послать несколько команд засыпания через DBus одновременно — чтобы убедиться на собственном опыте как оно работает.
Процесс просыпания
В отличие от засыпания, процесс возвращения из сна фактически неконтролируемый — вас просто ставят перед фактом что система проснулась.
Поэтому скрипт /etc/rc.resume
отрабатывает только после полного успешного просыпания системы.
Также существует еще один важный нюанс, связанный с пробуждением, о котором вам стоит знать:
в некоторых моделях ноутбуков раскрытие крышки автоматически запустит пробужение из сна и как-то контролировать это поведение из пользовательских настроек или скриптов нельзя.
Если повезет — будет настройка в BIOS, где такую реакцию можно отключить.
История с Lid
Во всех BSD-системах есть специальный параметр, который отвечает за обработку закрытия крышки ноутбука, во FreeBSD он называется:
hw.acpi.lid_switch_state
Если поставить этому параметру значение:
sysctl hw.acpi.lid_switch_state=S3
то при закрытии крышки ноутбука произойдет засыпание.
Технически отработает событие закрытия крышки ноутбука, по которому devd
запустит тот самый /etc/rc.suspend
скрипт.
Но мой опыт показывает, что вся эта красота нах#й не нужна того не стоит:
процесс засыпания — сложный и может сломаться в любой момент, на него влияют даже запущенные программы и общая нагрузка на CPU и память.
После чего есть неиллюзорный шанс что ноутбук продолжит работать, а вы захлопнув крышку этого просто не заметите.
Что люди делают сразу после закрытия крышки ноутбука?
кладут его в рюкзак или еще какое узкое пространство без кислорода и вентиляции.
Это ни разу не теория, поскольку такое однажды случилось со мной и одним из моих ноутбуков:
решил ненадолго поработать в московском метро, затем просто захлопнул крышку, думая что ноутбук успешно заснул.
Лишь случайно удалось заметить, что будучи положенным в рюкзак тот продолжал работать, поэтому фатального повреждения удалось избежать.
Веселое будущее
Как обычно внезапно оказалось, что весь этот концепт с «suspend state» успел устареть и в последних поколениях ноутбуков теперь полностью новое API (S0ix), пока не поддерживаемое FreeBSD.
К счастью (или сожалению) у меня пока нет в работе настолько современных ноутбуков, так что данная проблема пока не успела затронуть мою скромную персону.
Все мои железки
Ниже описаны конкретные модели ноутбуков, которые автор использует с FreeBSD уже много лет, к каждому описана настройка процессов засыпания и пробуждения, а также приведены важные особенности той или иной модели.
Причем большая их часть отсутствует в официальном списке совместимого оборудования (HCL) и мало того — по некоторым вообще нет упоминаний в сети, что данная конкретная модель работает хотя-бы с Linux.
Так что материал в некотором смысле уникальный.
Lenovo Z580
Обзор на эту модель можно посмотреть тут, машинка служит автору уже очень давно, сменив:
корпус, экран, процессор, дискретную видеокарту и память.
Про диски и батареи молчу, поскольку это расходники и менялись бесчисленное количество раз.
В принципе на 2025 год аппарат наверное уже является немного устаревшим, но поскольку модель была очень популярной — до сих пор легко достаются запчасти и расходники, причем даже в космических пердях провинции, а не только в столицах.
Так что если вдруг разобьете экран, клавиатуру или корпус — всегда можно достатьна помойкеновые.
Добавлю, что в оригинале корпус был серым, но после того как был разбит (окончательно) и встала необходимость замены — ремонтники подогнали очень редкий красный вариант:
Кстати батарея в этой модели легко снимается без разбора корпуса, хотя и сам корпус спокойно разбирается подручными средствами и не очень прямыми руками.
Легко добраться и до памяти (отдельная крышка на двух болтах) и до дисков — вместо CD/DVD-ROM вставляются салазки со вторым диском.
Короче перед вами идеальная полевая машина для тотальной кибервойны, эдакий УАЗик от ноутбуков.
дискретная NVIDIA и встроенная Intel.
Поскольку карту NVIDIA я не использую, она автоматически отключается при запуске специальным скриптом.
В противном случае при восстановлении из сна будет зависание системы с концами.
Дискретная карта называется GeForce GT 640M
, поддерживается она драйвером nvidia-driver-304
.
Еще ноутбук не всегда возвращается из сна с текущей версией модуля drm-kmod
, частью которого является драйвер для встроенных видеокарт от Intel, поэтому необходимо использовать более старый drm-515-kmod
.
Суммарно в /etc/rc.conf
должно быть так:
kld_list="i915kms nvidia acpi_video acpi_call"
Модуль acpi_call
используется упомянутым выше скриптом, который программно отключает дискретную видеокарту, чтобы та не жрала батарею.
В /boot/loader.conf
у меня следующие настройки:
hw.i915kms.reset=1 kern.vt.deadtimer=60 hw.usb.no_suspend_wait=1 kern.vt.suspendswitch=0 hw.syscons.sc_no_suspend_vtswitch=1 hw.pci.do_power_nodriver=3
Все это необходимо для стабильного восстановления ноутбука из сна, во всех ситуациях.
ThinkPad L390
Более-менее современный «ультрабук» в моей коллекции, обзор на эту модель находится тут.
Как и большинство ультрабуков, аппарат фактически неразборный — поменять диск, память или батарею можно только силами ремонтников в мастерской, вскрывать корпус самостоятельно не советую — он на защелках, которые легко отламываются.
Но память тут не впаяна, поэтому ее объем можно увеличить, заменив планки.
Про эту модель могу сказать две важные для BSD-шника вещи, одну хорошую, а вторую (по традиции) — плохую.
практически все железо в нем работает с FreeBSD «из коробки», без дополнительных плясок с бубном и настроек.
Работает видео (i1915kms
), звук и даже bluetooth.
Единственное что не удалось завести — считыватель отпечатков пальцев, который внезапно тут тоже есть.
Разумеется засыпание и пробуждение работают как часы, поэтому единственная дополнительная настройка была добавлена для обхода одного дурацкого бага:
% cat /boot/loader.conf compat.linuxkpi.i915_disable_power_well="0"
для работы WiFi-карты нужен Wifibox, иначе карта перестает работать после просыпания и часто сбоит при загрузке системы после перезагрузки из Windows или Linux.
Детальная статья про Wifibox и его настройку находится тут, ниже показываю как выглядит /etc/rc.conf
с отключенными «нативными» модулями для этой WiFi-карты:
devmatch_blocklist="if_iwm if_iwlwifi" dbus_enable="YES" devd_enable="YES" kld_list="fusefs i915kms"
Fujitsu Lifebook U554
Редкая для РФ модель ультрабука, на момент покупки имевшая самую долгую работу от батареи (14 часов, больше было только у Macbook), обзор можно посмотреть тут.
На фото видно сильно затертый корпус, частично металлический.
Так вот корпус у этого ноутбука второй, т.е. уже был заменен.
Вот как он выглядел в оригинале, во времена моей работы в Сингапуре:
Аппарат (внезапно) частично разборный, поэтому и диск и батарея могут быть заменены в полевых условиях, без обязательной сдачи ноутбука ремонтникам и долгого ожидания.
Кстати батарея до сих пор легко доступна в открытой продаже, причем даже оригинальная — от производителя.
После обновления корпуса, мой девайс получил в качестве бонуса от ремонтников еще и тачскрин — стало можно водить пальцем по экрану, работает как большой тачпад.
Но поскольку так и не придумал, как и для чего это использовать — он у меня просто отключен, чтобы не жрал батарею.
На борту встроенная видеокарта от Intel, поэтому используется модульi915kms
в /etc/rc.conf
:
kld_list="i915kms acpi_video"
Также требуется отключить засыпание системной консоли:
kern.vt.suspendswitch=0
Для Xorg выставлен драйвер modesetting
но с указанием старого DRI (опять для Chrome и его багов отрисовки).
Файл /etc/X11/xorg.conf.d/10-modesetting.conf
:
Section "Device" Identifier "ModeSetting" Driver "modesetting" Option "DRI" "1" EndSection
Еще в ноутбуке установлена довольно гемморойная WiFi-карта:
AR9462 Atheros Wireless Network Adapter
которая требует полного сброса, параметр в /boot/loader.conf
:
dev.ath.0.hal.force_full_reset=1
Но конечно самый проблемный девайс и главное западло с этим ноутбуком это тачпад:
eGalax Inc. eGalaxTouch EXC7910-1131-43.00.00
Он требует специальной правки ядра и дополнительной настройки в Xorg для правильной работы.
Настройка для Xorg в файле /etc/X11/xorg.conf.d/30-touchpad.conf
:
Section "InputClass" Identifier "libinput touchpad catchall" Driver "libinput" MatchIsTouchpad "on" MatchDevicePath "/dev/input/event*" Option "AccelProfile" "adaptive" Option "DisableWhileTyping" "True" Option "MiddleEmulation" "True" Option "ScrollMethod" "edge" Option "Tapping" "True" Option "TappingDrag" "False" Option "TappingDragLock" "False" Option "AccelSpeed" "0.53" Option "ClickMethod" "clickfinger" Option "HorizontalScrolling" "off" Option "LeftHanded" "off" Option "NaturalScrolling" "off" EndSection
Также стоит добавить, как и на большинстве других ультрабуков — память (8Гб) тут впаяна на материнскую плату, поэтому расширению не поддается.
Lenovo T440
Боевая классика и настоящая «машинка апокалипсиса», на которой спокойно уживаются все три основных BSD: NetBSD, OpenBSD и FreeBSD.
И два линукса. И куча виртуалок и эмуляторов.
И все железно работает, причем годами.
Неубиваемый аппарат с прочной клавиатурой, который автор таскает с собой в походы и покатушки на 150км.
Переживет и меня и вас и третью мировую, имеет все шансы попасть в музей в качестве главного экспоната.
Батареи аж две, внутренняя к сожалению не поддается замене (т.к. впаяна), зато внешняя — на защелках и легко меняется в голом поле, без разбора корпуса.
К сожалению сам разбор затруднен, поскольку корпус опять на защелках (которые легко ломаются ага), поэтому быстро поменять диски или память не выйдет — только в мастерской и с помощью ремонтников.
Эта модель очень популярна среди BSD-разработчиков, поэтому все что касается процесса засыпания работает из коробки.
Но я все же добавил ряд настроек для уменьшения потребления батареи в файл /boot/loader.conf
:
hw.i915kms.enable_dc=0 hw.usb.no_boot_wait=1 compat.linuxkpi.i915_disable_power_well="0"
И немного настроек в /etc/sysctl.conf
для модуля i915kms
:
hw.i915kms.enable_guc="1" hw.i915kms.modeset="1" hw.i915kms.fastboot="1" hw.i915kms.disable_power_well="0" hw.i915kms.enable_dc="0" hw.i915kms.enable_fbc="1" hw.i915kms.enable_psr="0" hw.i915kms.enable_psr2_sel_fetch="0" hw.i915kms.panel_use_ssc="0" hw.i915kms.nuclear_pageflip="1" # да, он тут тоже нужен kern.vt.suspendswitch=0
Как видите, тут опять необходим отключенный параметр kern.vt.suspendswitch
, без которого видеокарта (вместе с ноутбуком) не всегда возвращается из сна.
Также я добавил настройку DRI, поскольку браузер Chromium в какой-то момент взял в привычку выдавать визуальные артефакты при отрисовке WebGL-сцен, файл /etc/X11/xorg.conf.d/20-intel.conf
:
Section "Device" Identifier "Intel Graphics" Driver "modesetting" Option "AccelMethod" "UXA" Option "TearFree" "true" Option "DRI" "3" EndSection
ASUS F3KE
Ноутбук с непростой судьбой, попавший в мои руки случайно и крайне необычным образом:
для одной сцены с дракой (автор когда-то занимался с настоящими каскадерами) хотели красиво разбить в кадре какое-нибудь компьютерное оборудование.
Так что я попросил знакомых ремонтников (Дима, Лена привет), которые занимались обслуживанием моего «железного зоопарка» выдать что-нибудь ненужное из электроники — на убой.
Они выдали это.
Сцена в итоге так и не состоялась (съемки отменили), а аппарат остался и недолго думая я решил вернуть его к жизни:
вместо устаревшего HDD был вставлен SSD, заменена батарейка BIOS и основная батарея.
Оказалось китайские аналоги батарей для столь древней модели до сих пор продаются!
С тех пор этот музейный экспонат используется для несения ужаса подрастающему поколению программистов написания статей и разных технических экспериментов.
Что же касается поддержки *BSD и Linux — скажу откровенно, что это точно не лучший девайс для подобных задач.
Если только вы не мазохист, с изысканным вкусом.
Дело в том, что это была топовая модель для старшего командного состава, поэтому ноутбук под завязку набит самыми разными портами и устройствами. Примерно половина из которых уже неактуальна.
Если только вам в 2025 году вдруг не понадобится встроенный 56K-модем или инфракрасный порт.
В качестве вишенки на торте из геммороя, в ноутбуке используется известное «скотское комбо»:
И то и другое хреново работает с открытыми системами даже по отдельности, а вместе — в одном компьютере превращается в натуральный ад.
Спасает только почтенный возраст:
за 20 лет успели наконец сделать открытые работающие драйвера даже для комбинации из AMD и Radeon, естественно с минимальной поддержкой ускорения.
Зато без необходимости ковырять закрытые прошивки из далекого прошлого своими силами.
Разумеется с настройкой ACPI в этом чудовище чуде пришлось серьезно разбираться, поэтому полная настройка описана в отдельной статье, тут.
Ниже пройдусь только по тем настройкам, которые имеют отношение к процессу засыпания.
Для начала настройка Xorg, файл/usr/local/etc/X11/xorg.conf.d/20-radeon.conf
:
Section "Device" Identifier "Card0" Driver "modesetting" Option "TearFree" "true" EndSection
Опция TearFree нужна как обычно только для Chromium и его дурацких шуток с отрисовкой.
# DO NOT WAIT FOR USB DEVICES FOR ROOT (/) FILESYSTEM hw.usb.no_boot_wait=1 # POWER OFF DEVICES WITHOUT ATTACHED DRIVER hw.pci.do_power_nodriver=3 kern.vt.suspendswitch=0 kern.vt.deadtimer=60 compat.linuxkpi.enable_fbc=0 hw.acpi.override_isa_irq_polarity=1
Dell G3
Последний в списке, но не последний в ежедневном использовании, огромный аппарат от Dell c 17' экраном.
Обзор можно посмотреть тут тут.
Оказалось, что серия активно развивается и продается, хотя автор приобрел этот ноутбук еще в 2018м году.
Однако стоит отметить, что разница между конкретными моделями внутри серии зачастую огромна — выпускаются ноутбуки одной серии с 17' или 15' экранами, с i7 или i5 процессорами, с сильно разным объемом памяти, разными видеокартами и так далее.
Собственно даже моя покупка этого ноутбука изначально была ошибкой — хотел взять модель с 15' экраном поскольку она меньше и легче, но банально ошибся при заказе.
Так что выбирать конкретную модель стоит тщательно.
Поставить FreeBSD на этот ноутбук удалось далеко не сразу, несмотря даже на тот факт, что с ним сразу шла установленная Ubuntu Linux в качестве ОС по-умолчанию.
Сам аппарат за годы использования был немного прокачен:
обновлены диски, вставлено 64Гб памяти и более мощная видеокарта.
На этом ноутбуке автор монтирует видео и гоняет взашей нейронки, помимо всего остального интересного, так что и память и мощная видекарта тут актуальны.
Главная засада с этой моделью это опять WiFi-карта, которая требует приседаний с Wifibox и для нормальной работы и восстановления после пробуждения из режима сна.
Без этого, со стандартными драйверами, Wifi-карта либо подвисает и перестает подавать признаки жизни, либо ноутбук зависает целиком.
На борту опять две видеокарты:
дискретная от NVIDIA и встроенная Intel
Работает этот «тандем» заметно лучше чем в описанном выше Z580 и не требует каких-либо серьезных заморочек с настройкой.
Все что я сделал, это указал id карты (отображается в выводе pciconv -lv
) и добавил стандартный блок с modesetting
:
cat /etc/X11/xorg.conf.d/intel.conf Section "Device" Identifier "Card1" Driver "modesetting" BusID "PCI:0:2:0" EndSection
В /boot/loader.conf
была добавлена минимальная настройка — для обхода известного бага, а также подгрузка модуля vmm
, которого требует сам Wifibox для работы:
vmm_load="YES" compat.linuxkpi.i915_disable_power_well="0"
В /etc/rc.conf
лишь настройка для отключения стандартных драйверов и инициализации Wifibox:
devmatch_blocklist="if_iwm if_iwlwifi" wifibox_enable="YES" ifconfig_wifibox0="SYNCDHCP" background_dhclient_wifibox0="YES" defaultroute_delay="0" kld_list="fusefs i915kms nvidia"
Также снова необходимо отключить засыпание TTY-консолей:
kern.vt.suspendswitch=0
Эпилог
Большая часть задач системного администратора, сетевого инженера, пентестера, тестировщика, DevOps и даже технического менеджмента вроде CTO не требует сверхсовременного, мощного оборудования.
Поэтому тема с использованием в работе 10-летних ноутбуков — формально устаревших, но отлично работающих врядли потеряет актуальность в ближайшем будущем.
Мне как и большинству коллег в первую очередь требуются надежность и безотказность а не погоня за гигагерцами, объемами памяти и прочими признаками элитности и успешности.
Плашки «Pro» и «Extreme» можете налепить себе на лоб или еще какое интересное место.
Я хочу быть уверенным, что мое оборудование не откажет в критический момент, хочу иметь возможность быстро вернуть его в работу минимальными усилиями или заменить, поэтому использую вот такие «неубиваемые» модели с дополнительной доводкой и настройкой.