Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/micmonay/keybd_event
For simulate key press in Linux, Windows and Mac in golang
https://github.com/micmonay/keybd_event
cgevent event golang key keybd-event keyboard linux macos simulate simulation uinput windows
Last synced: 29 days ago
JSON representation
For simulate key press in Linux, Windows and Mac in golang
- Host: GitHub
- URL: https://github.com/micmonay/keybd_event
- Owner: micmonay
- License: mit
- Created: 2016-01-23T11:52:12.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2023-12-12T08:40:06.000Z (about 1 year ago)
- Last Synced: 2024-11-17T12:41:59.817Z (about 1 month ago)
- Topics: cgevent, event, golang, key, keybd-event, keyboard, linux, macos, simulate, simulation, uinput, windows
- Language: Go
- Size: 97.7 KB
- Stars: 381
- Watchers: 8
- Forks: 57
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# keybd_event
[![go.dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/micmonay/keybd_event)
This library simulates the key press on a keyboard. It runs on Linux, Windows and Mac.
**Important :**
- The keys change in the different keyboard layouts of the target computer(s).
- I have tested this code on my system and I don't find any errors. If you have a bug, please create an issue.### Example :
```go
package mainimport (
"runtime"
"time"
"github.com/micmonay/keybd_event"
)func main() {
kb, err := keybd_event.NewKeyBonding()
if err != nil {
panic(err)
}// For linux, it is very important to wait 2 seconds
if runtime.GOOS == "linux" {
time.Sleep(2 * time.Second)
}
// Select keys to be pressed
kb.SetKeys(keybd_event.VK_A, keybd_event.VK_B)// Set shift to be pressed
kb.HasSHIFT(true)// Press the selected keys
err = kb.Launching()
if err != nil {
panic(err)
}
// Or you can use Press and Release
kb.Press()
time.Sleep(10 * time.Millisecond)
kb.Release()// Here, the program will generate "ABAB" as if they were pressed on the keyboard.
}
```For easy access to all the keys on the virtual keyboard, I have added more special keycodes constants `VK_SP*`.
Below is an illustration showing the "VK_" symbols for each key on the keyboard:
![keyboard.png](./keyboard.png)## Linux
On Linux this library uses **uinput**, which on the major distributions requires root permissions.
The easy solution is executing through root user (by using `sudo`). A worse way is by changing the executable's permissions by using `chmod`.
### Secure Linux Example
```bash
sudo groupadd uinput
sudo usermod -a -G uinput my_username
sudo udevadm control --reload-rules
echo "SUBSYSTEM==\"misc\", KERNEL==\"uinput\", GROUP=\"uinput\", MODE=\"0660\"" | sudo tee /etc/udev/rules.d/uinput.rules
echo uinput | sudo tee /etc/modules-load.d/uinput.conf
```Another subtlety on Linux: it is important after creating the `keybd_event` to **wait 2 seconds before running first keyboard actions**.
## Darwin (MacOS)
This library depends on Apple's frameworks, and I did not find a solution to cross-compile from another OS to MacOS.