Keyboard Logout: выход из системы нажатием кнопки
Используем библиотеку Keyboard на Arduino Leonardo, чтобы автоматически завершать сеанс пользователя нажатием одной физической кнопки.
Этот урок показывает, как превратить Arduino Leonardo, Micro или Due в USB-клавиатуру, которая по нажатию кнопки отправляет компьютеру команду выхода из учётной записи. Когда пин 2 замыкается на GND, плата имитирует одновременное нажатие двух или трёх клавиш, выдерживает короткую паузу и затем «отпускает» их.
Важно: команда
Keyboard.print()перехватывает управление клавиатурой вашего компьютера. Чтобы не потерять контроль над системой, всегда предусматривайте надёжный способ остановить скетч — например, триггер по состоянию пина, как сделано здесь. Никогда не вызывайте функции библиотекиKeyboardбез условия.
Необходимое оборудование
- Arduino Leonardo, Micro, or Due board
- тактовая кнопка (pushbutton)
- соединительные провода
- макетная плата (breadboard)
Схема подключения

Кнопка подключена между пином 2 и GND платы Arduino Leonardo на макетной плате. Внутренний подтягивающий резистор (INPUT_PULLUP) держит пин в состоянии HIGH, пока кнопка не нажата.
Принципиальная схема

На схеме: КНОПКА (PUSH BUTTON) соединяет пин 2 с GND платы Arduino Leonardo. Дополнительный резистор не нужен — используется встроенный pull-up.
Код
Перед загрузкой скетча обязательно укажите вашу операционную систему в переменной platform. Доступные значения обычно соответствуют Windows, macOS и Linux — у каждой системы своя комбинация клавиш для выхода.
Пока скетч работает, нажатие кнопки замыкает пин 2 на GND, и плата отправляет последовательность клавиш для завершения сеанса на подключённый по USB компьютер.
/*
Keyboard logout
Этот скетч демонстрирует работу библиотеки Keyboard.
При подключении пина 2 к земле выполняется выход из системы.
Используются следующие комбинации клавиш:
Windows: CTRL-ALT-DEL, затем ALT-l
Ubuntu: CTRL-ALT-DEL, затем ENTER
OSX: CMD-SHIFT-q
Для пробуждения: Spacebar.
Схема:
- Arduino Leonardo или Micro
- провод для соединения D2 с землёй
создан 6 Mar 2012
изменён 27 Mar 2012
автор Tom Igoe
Этот пример находится в открытом доступе.
https://www.arduino.cc/en/Tutorial/KeyboardLogout
*/
#define OSX 0
#define WINDOWS 1
#define UBUNTU 2
#include "Keyboard.h"
// измените значение в соответствии с вашей платформой:
int platform = OSX;
void setup() {
// настроить пин 2 как вход и включить подтягивающий резистор, чтобы на нём был HIGH, если
// он не подключён к земле:
pinMode(2, INPUT_PULLUP);
Keyboard.begin();
}
void loop() {
while (digitalRead(2) == HIGH) {
// ничего не делать, пока пин 2 не перейдёт в LOW
delay(500);
}
delay(1000);
switch (platform) {
case OSX:
Keyboard.press(KEY_LEFT_GUI);
// Shift-Q выполняет выход:
Keyboard.press(KEY_LEFT_SHIFT);
Keyboard.press('Q');
delay(100);
Keyboard.releaseAll();
// клавиша Enter:
Keyboard.write(KEY_RETURN);
break;
case WINDOWS:
// сочетание CTRL-ALT-DEL:
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press(KEY_DELETE);
delay(100);
Keyboard.releaseAll();
// сочетание ALT-L:
delay(2000);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('l');
Keyboard.releaseAll();
break;
case UBUNTU:
// сочетание CTRL-ALT-DEL:
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press(KEY_DELETE);
delay(1000);
Keyboard.releaseAll();
// Enter для подтверждения выхода:
Keyboard.write(KEY_RETURN);
break;
}
// ничего не делать:
while (true);
}
Как это работает
- В
setup()пин 2 настраивается какINPUT_PULLUP— в нормальном состоянии на нёмHIGH. - В
loop()постоянно проверяется состояние пина. - Когда кнопка нажата, пин переходит в
LOW. Скетч определяет ОС и формирует нужную комбинацию клавиш:
- Windows:
GUI+L - macOS:
CTRL+SHIFT+Power(или аналог) - Ubuntu/Linux:
CTRL+ALT+L
- Клавиши «нажимаются» через
Keyboard.press(), выдерживается паузаdelay(), затем вызываетсяKeyboard.releaseAll().
Типичные ошибки
- Неверная платформа в переменной
platform— скетч отправит не ту комбинацию клавиш. Проверьте значение перед загрузкой. - Плата не определяется как HID — убедитесь, что используете Leonardo, Micro или Due. Обычные платы на ATmega328 (Uno, Nano) не поддерживают эмуляцию USB-клавиатуры.
- Случайные срабатывания — дребезг кнопки может вызвать повторную отправку команды. Добавьте небольшую задержку или программный антидребезг после первого срабатывания.
- Потеря управления компьютером — если убрать условие по пину и вызвать
Keyboardвloop()без ограничений, плата будет непрерывно слать команды. Всегда держите под рукой способ отключить плату или перепрошить её через IDE (удерживайте кнопку Reset во время загрузки).
Как проверить результат
- Загрузите скетч, убедитесь, что в Serial Monitor нет сообщений об ошибках.
- Сохраните все открытые документы — после нажатия кнопки сеанс завершится.
- Нажмите кнопку на макетной плате.
- Компьютер должен выйти из учётной записи или показать экран блокировки — в зависимости от ОС.
Где пригодится
- Физическая кнопка быстрой блокировки рабочего места.
- Автоматизация тестирования экрана входа в систему.
- Обучающий пример работы с USB HID и библиотекой
Keyboard.
Дополнительные материалы
Больше базовых примеров вы найдёте в разделе built-in examples.
Подробное описание всех функций языка Arduino собрано в language reference.
Последнее обновление: 29.07.2015, SM