Initial commit.
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
# Keyboard Input Blocker
|
||||
|
||||
A graphical application for Linux that toggles keyboard input blocking with a
|
||||
single button. Perfect if your toddler likes to press a lot of buttons during
|
||||
video calls.
|
||||
|
||||
## Features
|
||||
|
||||
- Simple one-button toggle interface built with PyQt6
|
||||
- Disables/enables all keyboard input at the system level
|
||||
- Status indicator showing current state
|
||||
- Works on Wayland and X11
|
||||
|
||||
## Requirements
|
||||
|
||||
- Python 3.7+
|
||||
- PyQt6
|
||||
- evdev (Linux kernel input device library)
|
||||
|
||||
## Installation
|
||||
|
||||
### 1. Install dependencies
|
||||
|
||||
**On Ubuntu/Debian:**
|
||||
|
||||
```bash
|
||||
sudo apt-get install python3 python3-pip libevdev-dev
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
**On Fedora:**
|
||||
|
||||
```bash
|
||||
sudo dnf install python3 python3-pip libevdev-devel
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
**On Arch:**
|
||||
|
||||
```bash
|
||||
sudo pacman -S python3 libevdev python-pyqt6 python-evdev
|
||||
```
|
||||
|
||||
### 2. Run the application
|
||||
|
||||
The application requires elevated privileges to access input devices:
|
||||
|
||||
```bash
|
||||
sudo -E python3 kb-block.py
|
||||
```
|
||||
|
||||
Or make it executable:
|
||||
|
||||
```bash
|
||||
chmod +x kb-block.py
|
||||
sudo -E ./kb-block.py
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
1. Launch the application with `sudo -E`
|
||||
2. Click **"Block Keyboard"** to disable all keyboard input
|
||||
- The button turns red and shows **"Unblock Keyboard"**
|
||||
- Status shows "Keyboard BLOCKED ⚠"
|
||||
3. Click **"Unblock Keyboard"** to re-enable keyboard input
|
||||
- The button returns to normal
|
||||
- Status shows "Keyboard enabled ✓"
|
||||
|
||||
**Note:** When keyboard is blocked, you'll need to use:
|
||||
|
||||
- Mouse to unblock via the button
|
||||
- External input devices (if available)
|
||||
- Or kill the process from another terminal: `sudo killall -9 python3` (or the
|
||||
specific PID)
|
||||
|
||||
## How it Works
|
||||
|
||||
The application uses the `evdev` library to grab input devices at the kernel level:
|
||||
|
||||
- `grab()` - Prevents the keyboard from sending any events
|
||||
- `ungrab()` - Restores keyboard input
|
||||
|
||||
This works with both X11 and Wayland display servers.
|
||||
|
||||
## Permissions Note
|
||||
|
||||
The application requires `sudo` because it needs to directly access
|
||||
`/dev/input/event*` devices.
|
||||
|
||||
If you want to run without `sudo`, you can add your user to the `input` group:
|
||||
|
||||
```bash
|
||||
sudo usermod -a -G input $USER
|
||||
# Log out and back in for the change to take effect
|
||||
```
|
||||
|
||||
However, this is less secure as it grants all users in the input group broad
|
||||
input device access.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### No keyboard device found
|
||||
|
||||
- Ensure you're running with `sudo -E`
|
||||
- Check that keyboard input devices exist: `ls -la /dev/input/event*`
|
||||
|
||||
### Permission denied"
|
||||
|
||||
- Run with `sudo -E`
|
||||
- Or add your user to the input group (see Permissions Note above)
|
||||
|
||||
### Keyboard still responds
|
||||
|
||||
- Multiple keyboard devices may exist; the app grabs the primary one
|
||||
- Try unblocking and re-blocking
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the Zlib license (see [LICENSE](LICENSE) file for
|
||||
more information).
|
||||
Reference in New Issue
Block a user