Есть ли простой способ включения/выключения Caps Lock, Scroll Lock и Num Lock в Linux (OpenSuse) с использованием C++, какой заголовок файлы нужно использовать? Я хочу управлять некоторым устройством, имитируя нажатия клавиш.Как я могу включить/выключить Caps Lock, Scroll Lock, Num Lock key программно на Linux
ответ
Решение 1
Перейди голову, потому что это решение просто включить светодиод клавиатуры, если вам нужно включить Caps Lock несильно тоже см Раствора 2.
// Linux header, no portable source
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
int fd_console = open("/dev/console", O_WRONLY);
if (fd_console == -1) {
std::cerr << "Error opening console file descriptor\n";
exit(-1);
}
// turn on caps lock
ioctl(fd_console, 0x4B32, 0x04);
// turn on num block
ioctl(fd_console, 0x4B32, 0x02);
// turn off
ioctl(fd_console, 0x4B32, 0x0);
close(fd_console);
return 0;
}
Запомнить вам нужно запустить свою программу с привилегиями суперпользователя, чтобы записать в файл /dev/console
.
EDIT
Решение 2
Это решение работает с системным администратором окно X11 (на Linux почти стандарт).
// X11 library and testing extensions
#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>
int main(int argc, char *argv[]) {
// Get the root display.
Display* display = XOpenDisplay(NULL);
// Get the keycode for XK_Caps_Lock keysymbol
unsigned int keycode = XKeysymToKeycode(display, XK_Caps_Lock);
// Simulate Press
XTestFakeKeyEvent(display, keycode, True, CurrentTime);
XFlush(display);
// Simulate Release
XTestFakeKeyEvent(display, keycode, False, CurrentTime);
XFlush(display);
return 0;
}
Примечание: более ключ-символ может быть найден в header.
Чувствительность суперпользователя звучит так же глупо, как Windows. Противоположность безопасности, когда вам нужно что-то разрешить, чтобы сделать какую-то тривиальную, но важную вещь. Может ли быть возможно создать процесс демона или что-то, что может это сделать, и предоставить API для любого непривилегированного процесса? –
Как насчет [xdotool] (https://github.com/jordansissel/xdotool)? –
Есть ли аналог KDSETLED/KDGETLED в окнах? – MaysSpirit
- 1. Как я могу включить/выключить Caps Lock, Scroll Lock, ключ Num Lock программно
- 2. Как я могу включить/выключить Caps Lock, Scroll Lock и Num Lock Programmatically
- 3. Check Scroll Lock, Num Lock & Caps Lock в JavaScript на странице Загрузка
- 4. Есть ли способ, в Python, программно изменить CAPS LOCK/NUM LOCK/скроллинга состояния на hidraw устройства
- 5. Android edittext caps lock
- 6. Bind to Caps Lock
- 7. XKB - Get Caps Lock mask
- 8. Caps Lock as Tmux prefix key
- 9. Обнаружение, когда CAPS LOCK включен
- 10. Nuke - Matrix4 lock lock lock Z rotation
- 11. Java lock lock
- 12. Виджет приложения на Android Lock Lock Lock по умолчанию?
- 13. Lock android phone программно
- 14. Toggle Caps Lock On Tooltip на JTextField
- 15. сделать Caps Lock на странице Load
- 16. Как я могу получить состояние Caps Lock клавиатуры в javafx
- 17. Bash scripting: lock writer lock
- 18. Lock-Writer Lock в Haskell
- 19. Получить и установить статус Num/Caps/Scroll-lock в Mono C#
- 20. Как переключить Caps Lock в VB.NET?
- 21. Applescript для преобразования Esc в Caps Lock при нажатии; Контроль при нажатии Caps Lock (macOS Sierra)?
- 22. Pthread Mutex Lock Linux
- 23. VBA/API Keyboard Events w/Caps Lock & Shift Key
- 24. Detect Caps Lock в Python проклятия
- 25. Переопределить Caps Lock с Ctrl, используя C#
- 26. питон 3 обнаружения Caps Lock статус
- 27. Лучший способ перехватить нажатие Caps Lock
- 28. Что такое кнопка Scroll Lock на клавиатуре?
- 29. Активировать ключ «Caps lock» для разных языков
- 30. Control Caps-Lock для Android-клавиатуры
[This] (http://stackoverflow.com/questions/2171408/how-to-change-caps-lock-status-without-key-press) вопрос касается Python, но по сути тот же, поскольку механизм более или менее не зависит от языка. Я не знаю, является ли это POSIX или поддерживается другими Unices. – Downvoter