# Simulating keyboard on Linux, Windows and Mac OS in rust
On the next example, the library simulates key A, Z pressed.
The keyboard layout on the computer is important!
If you use a keyboard layout the US, you have corresponding keys, but if you use, for example, the french layout, you have another result. ```rust extern crate keybd_event;
use std::thread::{sleep, Thread};
use std::time::Duration; use keybdevent::KeyboardKey::{KeyA,KeyZ}; use keybdevent::KeyBondingInstance;
fn main() {
let mut kb = KeyBondingInstance::new().unwrap();
#[cfg(targetos = "linux")]
sleep(Duration::fromsecs(2));
kb.hasshift(true);
kb.addkeys(KeyA);
kb.add_keys(KeyZ);
kb.launching();
}
```
## Linux
On Linux this library use uinput, but generally the uinput is only for the root user.
The easy solution is executing on root user or change permission by chmod
, but it is not good.
You can follow the next example, for more security.
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 KeyBondingInstance, to waiting 2 seconds before running first keyboard actions
## Darwin (MAC OS) This library depends on the frameworks Apple, I did not find a solution for cross-compilation.