Есть ли надежный способ (программно) определить из сценария bash, выполняется ли он на ноутбуке или настольном компьютере?
Очевидно, я мог бы просто попросить пользователя спросить их, но это довольно неуклюже.
linux
shell-script
PseudoPsyche
источник
источник
Ответы:
Ненадежность проверки того, есть ли в системе аккумулятор, не соответствует действительности - ИБП, подключенный к системе (не только для питания, но и через USB, а также для автоматического отключения и мониторинга аккумулятора), может отображаться в качестве аккумулятора.
Однако есть хороший надежный способ:
На ноутбуке будет возвращено одно из следующих значений: «Портативный компьютер», «Портативный компьютер», «Портативный» или «Дополнительный ноутбук» (в зависимости от того, что производитель закодировал в BIOS). Полный список возможных значений приведен в разделе « Определение типа корпуса компьютера » в Руководстве по созданию сценариев Windows 2000 - не беспокойтесь, если это страница Microsoft TechNet, это не зависит от конкретной ОС.
dmidecode также может получить информацию о производителе оборудования, серийном номере системы (иногда) и т. д.
источник
/sys/module/battery
?Other
..bashrc
файлы. Запрашивать содержимое/sys/class/dmi/id/chassis_type
, которое является просто одним числом, гораздо лучше (как указано в другом ответе ниже).Решение Debian:
Чтобы определить, является ли машина с Debian ноутбуком, попробуйте:
Этот подход не требует
root
привилегий.Однако в других дистрибутивах этот каталог, по-видимому, существует, по крайней мере, в виде скелета, независимо от наличия или отсутствия батареи. Из комментариев (ниже) эти дистрибутивы включают CentOS, Ubuntu и производный от Ubuntu дистрибутив Linux Mint.
Более общее решение
Хотя это не работает на моих системах Debian, решение, предложенное Алексом, работает на Ubuntu & CentOS. Таким образом, для большей общности предлагается возможное комбинированное решение:
Этот подход не требует
root
привилегий.Подробнее
В системе Debian с реальной батареей
/sys/module/battery
каталог содержит много файлов. Один такой файл,/sys/module/battery/initstate
который содержит текстlive
. Однако в Ubuntu эти файлы не существуют даже на реальных ноутбуках. Таким образом, похоже, что наличие файла/sys/module/battery/initstate
можно использовать для тестирования ноутбука с Debian.В системах Debian, которые я тестировал,
/proc/acpi/battery
каталог , напротив, не существовал.источник
Я бы проверил, установлен ли на компьютере аккумулятор. И вот один из способов проверить это:
источник
BAT0
наBAT*
- это должно обнаружить все изменения.Чтобы не использовать sudo, вы можете прочитать содержимое
/sys/class/dmi/id/chassis_type
. Похоже, соответствуют следующей таблице:источник
Если проверка наличия батареи достаточно хороша, вы можете использовать эту функцию оболочки:
Использую это в Debian в течение многих лет. Обратите внимание, что это работает также для Debian, работающего в WSL или virtualbox.
Изменить: обобщено из других ответов в этой теме, чтобы поймать больше случаев.
источник