mirror of
https://github.com/jesseduffield/lazydocker.git
synced 2026-07-23 07:31:03 +00:00
77 lines
2.2 KiB
Markdown
77 lines
2.2 KiB
Markdown
# keybd_event
|
|
|
|
[](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 main
|
|
|
|
import (
|
|
"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:
|
|

|
|
|
|
## 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.
|