jbensmann / mouseless Goto Github PK
View Code? Open in Web Editor NEWA replacement for the mouse in Linux
License: MIT License
A replacement for the mouse in Linux
License: MIT License
I am already using kmonad, but I want to know if i can use both kmonad and mouseless together.
Using debug mode I can see error "Failed to open /dev/input/by-id/usb-CHESEN_USB_Keyboard-event-kbd: device or resource busy". I guess it is because kmonad is already using it. Any fix for this?
I have tried to add udev rule:
echo "KERNEL==\"uinput\", GROUP=\"$USER\", MODE:=\"0660\"
KERNEL==\"event*\", GROUP=\"$USER\", NAME=\"input/%k\", MODE=\"660\"" \
| sudo tee /etc/udev/rules.d/99-$USER.rules
and add my username into input
group:
sudo usermod -aG input $USER
However mouseless
still failed to launch with below message:
ERRO[0000] Failed to init the virtual mouse: could not create relative axis input device: could not open device file
ERRO[0000] Exiting
my system details:
Operating System: Arch Linux
KDE Plasma Version: 5.27.5
KDE Frameworks Version: 5.106.0
Qt Version: 5.15.9
Kernel Version: 6.3.5-arch1-1 (64-bit)
Graphics Platform: X11
Processors: 8 × Intel® Core™ i7-3770 CPU @ 3.40GHz
Memory: 15.5 GiB of RAM
Graphics Processor: Mesa Intel® HD Graphics 4000
Manufacturer: Intel
Product Name: B75A
Thank you for this amazing tool! I really enjoy it.
This issue ticket is just for a question or a suggestion for a new feature. I am experimenting with the following setting.
layers:
- name: base
bindings:
...
j: tap-hold j ; rightshift ; 300
...
When the "j" key is pressed longer than 300 ms, but any other keys are pressed after the "j" key, I want to type "j". Is there a way to do it?
I also tried another setting j: tap-hold-next j ; rightshift ; 300
too. I don't understand the difference in the behaviors tap-hold
and tap-hold-next
in this case.
sudo mouseless -d --config ~/.config/mouseless/config.yaml
the output is the following:DEBU[0000] Using config file: /home/arcus/.config/mouseless/config.yaml
ERRO[0000] Failed to read the config file: failed to parse layer 2 : failed to parse the key '_': neither an integer nor a key alias
ERRO[0000] Exiting
My system is arch very minimal, i may not have a package needed to run the binary.
Yes, the binary is in the path, the config file is correctly written
_: rightalt+_
) idk why, but by commenting that the program seems to run 'correctly'I have a bluetooth keyboard that does not show up in /dev/input/by-path/ or by-id at least not with kbd
in the name.
Is it possible to connect a Bluetooth keyboard with mouseless?
Thanks for your help!
When I run mouseless, I cannot use my regular mouse. I'd like to use this tool as a convenience, but still have access to my mouse. Is this possible?
Not an issue, but if you don't have /dev/uinput, do "sudo modprobe uinput" and it does the trick
I thought this would help someone if they didn't have /dev/uinput
Is there a way to start mouseless on system start without allowing the current user to read keyboard input?
I think allowing user to read keyboard input seems dangerous, since that enables the possiblity of keyloggers. However I do aware that Windows allow user to read keyboard input without elevated previlages. But it seems more secure to only allow elevated program to read keyboard input.
Here is what I have tried, apparently most people thinkg systemtcl
is the modern way to do this. So I created the following file
/etc/systemd/system/mouseless-daemon.service
:
[Unit]
Description=Mouseless
[Service]
ExecStartPre=chmod +x /usr/local/bin/mouseless
ExecStart=/usr/local/bin/mouseless --config /usr/local/share/config/config.yaml
[Install]
WantedBy=multi-user.target
However I keep getting the following error in systemctl status mouseless-daemon.service
× mouseless-daemon.service - Mouseless
Loaded: loaded (/etc/systemd/system/mouseless-daemon.service; disabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: failed (Result: exit-code) since Thu 2023-05-25 14:13:06 EDT; 17s ago
Duration: 1ms
Process: 7699 ExecStartPre=chmod +x /usr/local/bin/mouseless (code=exited, status=0/SUCCESS)
Process: 7703 ExecStart=/usr/local/bin/mouseless --config /usr/local/share/config/config.yaml (code=exited, status=203/EXEC)
Main PID: 7703 (code=exited, status=203/EXEC)
CPU: 3ms
May 25 14:13:06 fedora systemd[1]: Starting mouseless-daemon.service - Mouseless...
May 25 14:13:06 fedora systemd[1]: Started mouseless-daemon.service - Mouseless.
May 25 14:13:06 fedora (ouseless)[7703]: mouseless-daemon.service: Failed to locate executable /usr/local/bin/mouseless: Permission denied
May 25 14:13:06 fedora (ouseless)[7703]: mouseless-daemon.service: Failed at step EXEC spawning /usr/local/bin/mouseless: Permission denied
May 25 14:13:06 fedora systemd[1]: mouseless-daemon.service: Main process exited, code=exited, status=203/EXEC
May 25 14:13:06 fedora systemd[1]: mouseless-daemon.service: Failed with result 'exit-code'.
When running /usr/local/bin/mouseless --config /usr/local/share/config/config.yaml
as sudo works perfectly fine.
I was wondering if I can get any help with regard to this.
Is it possible to bind the \
key? If so what is the text value for it, because \
and backslash
don't work.
Hi, I am very sorry to post a personal setup issue in the issues, but I am at my wit's end here.
Presonally I use caplock
as leftctrl
, and use capslock+h, j, k, l
to move my cursors.
The problem with that setup is that I think of a good setup to do this. Because caplock
is performing two different functionality here, the first is toggling the arrows
layer, and the second is to act as ctrl
.
I have tried to use capslock: multi toggle-layer arrows; leftctrl
, but this means if I press capslock+j
it would send ctrl+down
instead of down
.
Is there any fix to let capslock+h, j, k, l
to move my cursors and for everything else use caplock
as leftctrl
?
Not an issue. Just wanted to say thanks! I've been addicted to trackpoints for many years now and all other keyboards are worthless to me. I've tried qmk-compatible keyboards but they are really tedious to configure. mouseless
fixes these problems and I can now start playing with new keyboards :D!
Hi. I would like to make the escape key work as usual, while not exiting the mouse layer, but ESC is always going back to the initial layer whenever I press it.
This is my config file:
# the keyboard devices it reads from, if no devices are specified, it reads from all
devices:
- "/dev/input/by-id/usb-LITEON_Technology_USB_Keyboard-event-kbd"
# - "/dev/input/by-id/SOME_KEYBOARD_REPLACE_ME-event-kbd"
# this is executed when mouseless starts, e.g. useful for setting the keyboard layout
# startCommand: "setxkbmap de"
# the default speed for mouse movement and scrolling
baseMouseSpeed: 750.0
baseScrollSpeed: 20.0
# the time it takes to accelerate to baseMouseSpeed (in ms), 0 to reach top speed immediately
mouseAccelerationTime: 200.0
# the shape of the acceleration curve, 1.0 is linear, higher values have more time at low speeds
mouseAccelerationCurve: 2.0
# speed of the mouse when it starts moving
startMouseSpeed: 0.0
# same for deceleration
mouseDecelerationTime: 300.0
mouseDecelerationCurve: 3.0
# the rest of the config defines the layers with their bindings
layers:
# the first layer is active at start
- name: initial
bindings:
# when tab is held and another key pressed, activate mouse layer
# tab: tap-hold-next tab ; toggle-layer mouse ; 500
numlock: tap-hold-next numlock ; toggle-layer mouse ; 500
# when a is held for 300ms, activate mouse layer
#a: tap-hold a ; toggle-layer mouse ; 300
## right alt key toggles arrows layer
# rightalt: toggle-layer arrows
## switch escape with capslock
# esc: capslock
# capslock: esc
# a layer for mouse movement
- name: mouse
# when true, keys that are not mapped keep their original meaning
passThrough: true
bindings:
# quit mouse layer
# q: layer initial
z: layer initial
# keep the mouse layer active
space: layer mouse
r: reload-config
# l: move 1 0
# j: move -1 0
# k: move 0 1
# i: move 0 -1
d: move 1 0
a: move -1 0
s: move 0 1
w: move 0 -1
# p: scroll up
# n: scroll down
leftbrace: scroll up
apostrophe: scroll down
rightshift: speed 4.0
# leftalt: speed 4.0
# e: speed 0.3
# w: speed 0.1
rightctrl: speed 0.3
compose: speed 0.1
# capslock: speed 0.1
# f: button left
# d: button middle
# s: button right
semicolon: button left
p: button middle
rightbrace: button right
# move to the top left corner
k0: "exec xdotool mousemove 0 0"
# # another layer for arrows and some other keys
# - name: arrows
# passThrough: false
# bindings:
# e: up
# s: left
# d: down
# f: right
# q: esc
# w: backspace
# r: delete
# v: enter
# # _ is the wildcard key, which matches any key that is not mapped
# _: rightalt+_
Hey, thanks for the cool program! I'm having troubles making mouseless run without sudo privileges. I ran the command on the readme, rebooted, and when trying to run mouseless it gave me this error.
ERRO[0000] Failed to init the virtual mouse: could not create relative axis input device: could not open device file
Then I tried to manually add the rules, this is the file. 99-seafoam.rules (user is seafoam)
KERNEL=="input", GROUP="seafoam", MODE:="0660" KERNEL=="event*", GROUP="seafoam", NAME="input/%k", MODE="660"
after rebooting, it kept giving me the same error as before. am I missing something?
Is possible to reduce the scroll speed ( the n and p keys) ?
Thanks
This is a very trivial request. The reason is because I am packaging this for Nix and generally I need to reference a license to it.
I am trying to modify the config file so, I can use the numpad keys but, I don't know its names.
When I tried to use numbers like: 4, 6, 8, ...
It used the numbers row, not the numpad.
And I tried KP_num like:
KP_4
KP_2
But didn't work.
How can I find keys name of the numpd ?
Thanks in advance.
The tool is great!.
Hello,
Thanks for the repo. I was before using xmouseless, but with the upgrade of ubuntu to the 22.04 version, I had to rebuilt xmouseless but it did not worked anymore, so I am trying to make mouseless work.
I am quite a novice, and I am trying to figure out how to make mouseless working. I have found my keyboard in "/dev/input/by-path/platform-i8042-serio-0-event-kbd
so that I replace this on the third line of the config.yaml file given in the configuration (only the third line has changed) :
devices:
# change this to a keyboard device
- "/dev/input/by-path/platform-i8042-serio-0-event-kbd"
# this is executed when mouseless starts
# startCommand: ""
# the default speed for mouse movement
baseMouseSpeed: 750.0
# the default speed for scrolling
baseScrollSpeed: 20.0
layers:
# the first layer is active at start
- name: initial
bindings:
# when tab is held and another key pressed, activate mouse layer
tab: tap-hold-next tab ; toggle-layer mouse ; 500
# when a is held for 300ms, activate mouse layer
a: tap-hold a ; toggle-layer mouse ; 300
# right alt key toggles arrows layer
rightalt: toggle-layer arrows
# switch escape with capslock
esc: capslock
capslock: esc
# a layer for mouse movement
- name: mouse
# when true, keys that are not mapped keep their original meaning
passThrough: true
bindings:
# quit mouse layer
q: layer initial
# keep the mouse layer active
space: layer mouse
r: reload-config
l: move 1 0
j: move -1 0
k: move 0 1
i: move 0 -1
p: scroll up
n: scroll down
leftalt: speed 4.0
e: speed 0.3
capslock: speed 0.1
f: button left
d: button middle
s: button right
# move to the top left corner
k0: "exec xdotool mousemove 0 0"
# another layer for arrows and some other keys
- name: arrows
passThrough: true
bindings:
e: up
s: left
d: down
f: right
q: esc
w: backspace
r: delete
v: enter
It is located in ~/.config/mouseless
.
Since sudo mouseless --config ~/.config/mouseless/config.yaml
is returning mouseless: command not found
, I am guessing I have to install mouseless before, so that I ran ./mouseless
when I am on the dist
directory downloaded previsouly, but it is giving me the following error:
ERRO[0000] Failed to init the virtual mouse: could not create relative axis input device: could not open device file
Can anyone help me ?
Thanks for your help.
Following are the problems that i have faced using this software:
I just love this software and the concept behind it but was facing these issues lately, i wanted it to be a complete replacement to my mouse. I understand that some of the issues cannot be mitigated easily because of how this software is designed, i just wanted to make sure if i am using it right or not. Was this able to replace your mouse in your setup?
I am using the default config [tried changing it as well but didn't help much]
i have set my keyboard to register key taps faster (xset r rate 250 35), but when i run mouseless, it gets reverted back to the default slower speed. Is there any way to fix this? Thanks :)
I have setup some control for going foward/back in my browser, but often use different browsers means that it only works on one and not both.
Getting "Back" or "XF86Back" would solve that. I have tried both and also "button back" but none of then are recognised by mouseless.
I am new to mouseless and am using the default config in the readme file. When I am holding down the tab key for example and press the mouse layer keys the mouse moves as expected.
However, if I hold a, for example, and try to use those same keys the mouse layer never "toggles" on.
My question is what would the syntax be for me to bind a key, for example "capslock", so when I press that key it turns the mouse layer on and if I press it again "toggles" it off? If there is a another key that is a simpler example then capslock no worries just curious.
Thanks in advance as holding down tab isn't the easiest with some key presses :) .
When moving the mouse pointer diagonally, e.g. with speed 1 to the right and 1 upwards, the total speed is not sqrt(2)
as expected, but somewhat higher, so that the speed to the right is actually also higher than 1. At least this is the case for relatively slow speeds.
The cause is that mouseless is producing the same events as a physical mouse, and the speed of the pointer usually is not linear to the speed of a mouse, one can see in this diagram how they are related (the different curves show different settings):
https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html#ptraccel-linear
It is generally possible to make this relation linear by configuration, but unclear whether it can be done independently of the display server (e.g. Xorg or Wayland), which would be preferable.
Perhaps I have misunderstood something about the key-combo syntax, but I had thought that i could activate a layer holding down multiple keys like this:
- name: initial
bindings:
leftmeta+leftalt: tap-hold-next leftmeta+leftalt; toggle-layer mouse ; 300
But I can't get that working. (Both leftmeta and leftalt work fine seperately)
I have the config.yaml file in the right place saved. But I am still getting this error.
mouseless.service - mouseless
Loaded: loaded (/etc/systemd/system/mouseless.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Sun 2023-12-31 10:01:45 +06; 14s ago
Duration: 3ms
Process: 7412 ExecStart=/usr/local/bin/mouseless --config ~/.config/mouseless/config.yaml (code=exited, status=1/FAILURE)
Main PID: 7412 (code=exited, status=1/FAILURE)
CPU: 4ms
Dec 31 10:01:45 smabari-A520MH-3-0 systemd[1]: Started mouseless.service - mouseless.
Dec 31 10:01:45 smabari-A520MH-3-0 mouseless[7412]: time="2023-12-31T10:01:45+06:00" level=error msg="Failed to read the config file: open ~/.config/museless/config.yaml: no such file or directory"
Dec 31 10:01:45 smabari-A520MH-3-0 mouseless[7412]: time="2023-12-31T10:01:45+06:00" level=error msg=Exiting
Dec 31 10:01:45 smabari-A520MH-3-0 systemd[1]: mouseless.service: Main process exited, code=exited, status=1/FAILURE
Dec 31 10:01:45 smabari-A520MH-3-0 systemd[1]: mouseless.service: Failed with result 'exit-code'.
Hello,
Thanks for mouseless, it is great.
I am getting a new split keyboard and as a result, my OS see 2 differents keyboard for the split keyboard. Do you know if I can change something in the config.yaml
file so that it takes both keyboards ? Something like
devices:
- PATH/TO/KEYBOARD1
- PATH/TO/KEYBOARD2
Thanks :)
The mouse cursor currently moves at a constant speed. The speed may be too slow for moving the cursor longer distances, and too fast to get the precision you need. It's possible to modify the speed if you bind the speed
function to a modifier key, but that is not always so convenient to use.
I propose modifying the cursor's speed over time, so it accelerates in the direction you are pressing (a bit like Super Mario and other user-controlled objects in games).
I have a working implementation of this in a branch.
I'm going to play around with it for a while to feel if it can be improved. I'm considering retardation as well, so the cursor doesn't stop immediately when you release the key.
Hi! First of all, thanks for your new program! I've been using (and proselytizing about) xmouseless
for a while now, and am very happy with it. :)
At the same time, I've been wanting to switch to Wayland on KDE — since you announced on xmouless's issue list that you'd make a replacement that runs on Wayland, I've been enthusiastically waiting for it.
However, I wasn't able to run it.
Apparently, my system blocks the device from being used:
ls /dev/input/by-id/*kbd* ; ls /dev/input/by-path/*kbd*
gives me:
/dev/input/by-id/usb-413c_Dell_KB216_Wired_Keyboard-event-kbd
/dev/input/by-path/pci-0000:0a:00.3-usb-0:4:1.0-event-kbd
which is linked/mapped to event3
(i.e. /dev/input/event3
)
Either sudo lsof /dev/input/by-id/usb-413c_Dell_KB216_Wired_Keyboard-event-kbd
or sudo lsof /dev/input/event3
gives me something like:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 105u CHR 13,67 0t0 611 /dev/input/by-id/../event3
systemd-l 531 root 18u CHR 13,67 0t0 611 /dev/input/by-id/../event3
systemd-l 531 root 28u CHR 13,67 0t0 611 /dev/input/by-id/../event3
kwin_wayl 863 aug 32u CHR 13,67 0t0 611 /dev/input/by-id/../event3
(the truncated commands should be kwin_wayland
and systemd-logind
, I think)
If I had to guess — but I don't really know about any of this — kwin_wayland
would be the "culprit"?
EDIT: got the same problem on X11. So I've edited the issue title to not include "Wayland".
sudo lsof /dev/input/by-id/usb-413c_Dell_KB216_Wired_Keyboard-event-kbd
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-l 531 root 18u CHR 13,67 0t0 611 /dev/input/by-id/../event3
Xorg 5695 root 36u CHR 13,67 0t0 611 /dev/input/by-id/../event3
Here's the full output of mouseless
with the --debug
flag:
sudo mouseless --debug --config ~/.config/mouseless/config.yaml
[sudo] password for aug:
DEBU[0000] Available keyboard devices:
DEBU[0000] /dev/input/by-path/pci-0000:0a:00.3-usb-0:4:1.0-event-kbd Dell KB216 Wired Keyboard usb-0000:0a:00.3-4/input0
DEBU[0000] /dev/input/by-id/usb-413c_Dell_KB216_Wired_Keyboard-event-kbd Dell KB216 Wired Keyboard usb-0000:0a:00.3-4/input0
DEBU[0000] Using config file: /home/aug/.config/mouseless/config.yaml
DEBU[0000] config: {Devices:[/dev/input/by-id/usb-413c_Dell_KB216_Wired_Keyboard-event-kbd] StartCommand:setxkbmap en BaseMouseSpeed:750 BaseScrollSpeed:20 Layers:[0xc0000be2e0 0xc0000be3a0 0xc0000be5a0]}
DEBU[0000] Switching to initial layer initial
DEBU[0000] Executing start command: setxkbmap en
DEBU[0000] opening the keyboard device /dev/input/by-path/pci-0000:0a:00.3-usb-0:4:1.0-event-kbd
DEBU[0000] InputDevice /dev/input/by-path/pci-0000:0a:00.3-usb-0:4:1.0-event-kbd (fd 12)
name Dell KB216 Wired Keyboard
phys usb-0000:0a:00.3-4/input0
bus 0x0003, vendor 0x413c, product 0x2113, version 0x0111
events EV_SYN 0, EV_KEY 1, EV_MSC 4, EV_LED 17
DEBU[0000] Device name: Dell KB216 Wired Keyboard
DEBU[0000] Evdev protocol version: 65537
DEBU[0000] Device info: bus 0x0003, vendor 0x413c, product 0x2113, version 0x0111
DEBU[0000] opening the keyboard device /dev/input/by-id/usb-413c_Dell_KB216_Wired_Keyboard-event-kbd
DEBU[0000] Failed to open /dev/input/by-id/usb-413c_Dell_KB216_Wired_Keyboard-event-kbd: device or resource busy
ERRO[0000] Execution of start command failed: exit status 5
My ~/.config/mouseless/config.yaml
is the same as https://github.com/jbensmann/mouseless#configuration , except for the device line, of course:
line 1 devices:
line 2 # change this to a keyboard device
line 3 - "/dev/input/by-id/usb-413c_Dell_KB216_Wired_Keyboard-event-kbd"
line 4 # - "/dev/input/event3"
line 5 # - "/dev/input/by-path/pci-0000:0a:00.3-usb-0:4:1.0-event-kbd"
line 6 # this is executed when mouseless starts
line 7 startCommand: "setxkbmap en"
I tried switching between lines 3, 4 and 5 just in case, but the debug output is always the same:
DEBU[0000] Failed to open /dev/input/by-id/usb-413c_Dell_KB216_Wired_Keyboard-event-kbd: device or resource busy
ERRO[0000] Execution of start command failed: exit status 5
Finally, I also tried running without root privileges, but the debug message is the same as with sudo
. My user is aug
, so the file is /etc/udev/rules.d/99-aug.rules
, with only this as content:
KERNEL=="uinput", GROUP="aug", MODE:="0660"
KERNEL=="event*", GROUP="aug", NAME="input/%k", MODE="660"
Please let me know if this is useful information, or the right place to send it.
Thanks!
I want to have a mode for remembering the cursor position (preferably three: horizontal, vertical and both) and a mode for restoring the position. Like the standard " m " and " ' " in vim. Your application turned out to be convenient for everyday use, but it took a relatively long time to aim the cursor at small panels or timeline videos.
I have 4*4 keys to teleport the cursor, as in keynav/keynavish/warpd, but this is too universal a solution. I would like to record positions on the fly without a hardcode.
Thanks, mouseless works stably and it is much better than keynav/keynavish/warpd/xmouseless. What an irony, I tried mouseless the last of such programs.
I was pleased that there is a meta action "multi", but I could not cover more than two actions (even by embedding one operator into another).
Thank you for getting rid of the mouse!
See line 57. I noticed that "toggle-layer can only work if not already enabled. Being on a layer enabled with the "toggle-layer", we cannot use this function until we return to the previous layer.
devices:
- "/dev/input/by-id/usb-Usb_KeyBoard_Usb_KeyBoard-event-kbd"
# this is executed when mouseless starts
# startCommand: ""
baseMouseSpeed: 375.0
baseScrollSpeed: 20.0
layers:
# I activate the mouse layer by pressing alt+,. Perhaps it would be easier to immediately map "alt+comma: ..." if there was an opportunity. However, i liked to use "intermediate" layers.
- name: initial
passThrough: true
bindings:
leftalt: toggle-layer alt
rightalt: toggle-layer alt
leftmeta: multi leftmeta; toggle-layer meta
rightmeta: multi rightmeta; toggle-layer meta
leftctrl: multi leftctrl; toggle-layer block
rightctrl: multi rightctrl; toggle-layer block
leftshift: multi leftshift; toggle-layer block
rightshift: multi rightshift; toggle-layer block
# This layer is used to block combinations when an "undesirable" modifier is pressed. I don't know whether it is worth using such an invention:
- name: block
passThrough: true
# It may be used as a "block" layer, so I'll probably remove it:
- name: meta
passThrough: true
# It will be used if it is possible to return after releasing the meta key:
- name: altmeta
passThrough: true
- name: alt
passThrough: false
bindings:
j: layer aim
comma: layer mouse
e: down
w: up
q: right
r: left
apostrophe: enter
k: leftalt+k
slash: multi leftalt; slash
i: esc
m: leftalt+m
t: rightalt+t
y: leftalt+y
u: multi leftalt+u; layer active
h: leftalt+h
l: leftalt+l
semicolon: leftalt+semicolon
o: leftalt+o
# !!!!!!! It is not possible to switch to the meta layer because the "alt" layer was called using "toggle-layer", not "layer". :(
leftmeta: toggle-layer meta
- name: mouse
passThrough: false
bindings:
leftalt: toggle-layer mouse-alt
rightalt: toggle-layer mouse-alt
m: layer save-mark
apostrophe: layer goto-mark
s: layer initial
j: move -1 0
k: move 0 1
l: move 0 -1
semicolon: move 1 0
w: scroll up
e: scroll down
z: speed 4.0
a: speed 0.20
capslock: speed 0.1
leftshift: speed 0.1
f: button left
d: button right
r: button middle
c: exec xdotool mousemove 480 270
v: exec xdotool mousemove 1440 270
x: exec xdotool mousemove 480 810
z: exec xdotool mousemove 1440 810
- name: mouse-alt
passThrough: false
bindings:
j: layer aim
- name: aim
bindings:
f: multi layer mouse; exec xdotool mousemove 239 135
d: multi layer mouse; exec xdotool mousemove 719 135
s: multi layer mouse; exec xdotool mousemove 1199 135
a: multi layer mouse; exec xdotool mousemove 1679 135
v: multi layer mouse; exec xdotool mousemove 239 405
c: multi layer mouse; exec xdotool mousemove 719 405
x: multi layer mouse; exec xdotool mousemove 1199 405
z: multi layer mouse; exec xdotool mousemove 1679 405
j: multi layer mouse; exec xdotool mousemove 239 675
k: multi layer mouse; exec xdotool mousemove 719 675
l: multi layer mouse; exec xdotool mousemove 1199 675
semicolon: multi layer mouse; exec xdotool mousemove 1679 675
m: multi layer mouse; exec xdotool mousemove 239 945
comma: multi layer mouse; exec xdotool mousemove 719 945
dot: multi layer mouse; exec xdotool mousemove 1199 945
slash: multi layer mouse; exec xdotool mousemove 1679 945
- name: advanced-mouse
passThrough: true
- name: save-mark
passThrough: false
bindings:
q: multi exec /home/danil/.config/mouseless/save-mark.sh q; layer mouse
w: multi exec /home/danil/.config/mouseless/save-mark.sh w; layer mouse
e: multi exec /home/danil/.config/mouseless/save-mark.sh e; layer mouse
r: multi exec /home/danil/.config/mouseless/save-mark.sh r; layer mouse
t: multi exec /home/danil/.config/mouseless/save-mark.sh t; layer mouse
y: multi exec /home/danil/.config/mouseless/save-mark.sh y; layer mouse
u: multi exec /home/danil/.config/mouseless/save-mark.sh u; layer mouse
i: multi exec /home/danil/.config/mouseless/save-mark.sh i; layer mouse
o: multi exec /home/danil/.config/mouseless/save-mark.sh o; layer mouse
p: multi exec /home/danil/.config/mouseless/save-mark.sh p; layer mouse
leftbrace: multi exec /home/danil/.config/mouseless/save-mark.sh leftbrace; layer mouse
rightbrace: multi exec /home/danil/.config/mouseless/save-mark.sh rightbrace; layer mouse
a: multi exec /home/danil/.config/mouseless/save-mark.sh a; layer mouse
s: multi exec /home/danil/.config/mouseless/save-mark.sh s; layer mouse
d: multi exec /home/danil/.config/mouseless/save-mark.sh d; layer mouse
f: multi exec /home/danil/.config/mouseless/save-mark.sh f; layer mouse
g: multi exec /home/danil/.config/mouseless/save-mark.sh g; layer mouse
h: multi exec /home/danil/.config/mouseless/save-mark.sh h; layer mouse
j: multi exec /home/danil/.config/mouseless/save-mark.sh j; layer mouse
k: multi exec /home/danil/.config/mouseless/save-mark.sh k; layer mouse
l: multi exec /home/danil/.config/mouseless/save-mark.sh l; layer mouse
semicolon: multi exec /home/danil/.config/mouseless/save-mark.sh semicolon; layer mouse
apostrophe: multi exec /home/danil/.config/mouseless/save-mark.sh apostrophe; layer mouse
backslash: multi exec /home/danil/.config/mouseless/save-mark.sh backslash; layer mouse
z: multi exec /home/danil/.config/mouseless/save-mark.sh z; layer mouse; layer mouse
x: multi exec /home/danil/.config/mouseless/save-mark.sh x; layer mouse; layer mouse
c: multi exec /home/danil/.config/mouseless/save-mark.sh c; layer mouse; layer mouse
v: multi exec /home/danil/.config/mouseless/save-mark.sh v; layer mouse; layer mouse
b: multi exec /home/danil/.config/mouseless/save-mark.sh b; layer mouse; layer mouse
n: multi exec /home/danil/.config/mouseless/save-mark.sh n; layer mouse; layer mouse
m: multi exec /home/danil/.config/mouseless/save-mark.sh m; layer mouse; layer mouse
comma: multi exec /home/danil/.config/mouseless/save-mark.sh comma; layer mouse
dot: multi exec /home/danil/.config/mouseless/save-mark.sh dot; layer mouse
slash: multi exec /home/danil/.config/mouseless/save-mark.sh slash; layer mouse
k1: multi exec /home/danil/.config/mouseless/save-mark.sh k1; layer mouse
k2: multi exec /home/danil/.config/mouseless/save-mark.sh k2; layer mouse
k3: multi exec /home/danil/.config/mouseless/save-mark.sh k3; layer mouse
k4: multi exec /home/danil/.config/mouseless/save-mark.sh k4; layer mouse
k5: multi exec /home/danil/.config/mouseless/save-mark.sh k5; layer mouse
k6: multi exec /home/danil/.config/mouseless/save-mark.sh k6; layer mouse
k7: multi exec /home/danil/.config/mouseless/save-mark.sh k7; layer mouse
k8: multi exec /home/danil/.config/mouseless/save-mark.sh k8; layer mouse
k9: multi exec /home/danil/.config/mouseless/save-mark.sh k9; layer mouse
k0: multi exec /home/danil/.config/mouseless/save-mark.sh k0; layer mouse
leftshift: toggle-layer shift-save-mark
rightshift: toggle-layer shift-save-mark
- name: shift-save-mark
bindings:
q: multi exec /home/danil/.config/mouseless/save-mark.sh Q; layer mouse
w: multi exec /home/danil/.config/mouseless/save-mark.sh W; layer mouse
e: multi exec /home/danil/.config/mouseless/save-mark.sh E; layer mouse
r: multi exec /home/danil/.config/mouseless/save-mark.sh R; layer mouse
t: multi exec /home/danil/.config/mouseless/save-mark.sh T; layer mouse
y: multi exec /home/danil/.config/mouseless/save-mark.sh Y; layer mouse
u: multi exec /home/danil/.config/mouseless/save-mark.sh U; layer mouse
i: multi exec /home/danil/.config/mouseless/save-mark.sh I; layer mouse
o: multi exec /home/danil/.config/mouseless/save-mark.sh O; layer mouse
p: multi exec /home/danil/.config/mouseless/save-mark.sh P; layer mouse
leftbrace: multi exec /home/danil/.config/mouseless/save-mark.sh leftcurlybrace; layer mouse
rightbrace: multi exec /home/danil/.config/mouseless/save-mark.sh rightcurlybrace; layer mouse
a: multi exec /home/danil/.config/mouseless/save-mark.sh A; layer mouse
s: multi exec /home/danil/.config/mouseless/save-mark.sh S; layer mouse
d: multi exec /home/danil/.config/mouseless/save-mark.sh D; layer mouse
f: multi exec /home/danil/.config/mouseless/save-mark.sh F; layer mouse
g: multi exec /home/danil/.config/mouseless/save-mark.sh G; layer mouse
h: multi exec /home/danil/.config/mouseless/save-mark.sh H; layer mouse
j: multi exec /home/danil/.config/mouseless/save-mark.sh J; layer mouse
k: multi exec /home/danil/.config/mouseless/save-mark.sh K; layer mouse
l: multi exec /home/danil/.config/mouseless/save-mark.sh L; layer mouse
semicolon: multi exec /home/danil/.config/mouseless/save-mark.sh colon; layer mouse
apostrophe: multi exec /home/danil/.config/mouseless/save-mark.sh doublequotes; layer mouse
backslash: multi exec /home/danil/.config/mouseless/save-mark.sh pipe; layer mouse
z: multi exec /home/danil/.config/mouseless/save-mark.sh Z; layer mouse; layer mouse
x: multi exec /home/danil/.config/mouseless/save-mark.sh X; layer mouse; layer mouse
c: multi exec /home/danil/.config/mouseless/save-mark.sh C; layer mouse; layer mouse
v: multi exec /home/danil/.config/mouseless/save-mark.sh V; layer mouse; layer mouse
b: multi exec /home/danil/.config/mouseless/save-mark.sh B; layer mouse; layer mouse
n: multi exec /home/danil/.config/mouseless/save-mark.sh N; layer mouse; layer mouse
m: multi exec /home/danil/.config/mouseless/save-mark.sh M; layer mouse; layer mouse
comma: multi exec /home/danil/.config/mouseless/save-mark.sh lessthan; layer mouse
dot: multi exec /home/danil/.config/mouseless/save-mark.sh greaterthan; layer mouse
slash: multi exec /home/danil/.config/mouseless/save-mark.sh questionmark; layer mouse
k1: multi exec /home/danil/.config/mouseless/save-mark.sh shift-k1; layer mouse
k2: multi exec /home/danil/.config/mouseless/save-mark.sh shift-k2; layer mouse
k3: multi exec /home/danil/.config/mouseless/save-mark.sh shift-k3; layer mouse
k4: multi exec /home/danil/.config/mouseless/save-mark.sh shift-k4; layer mouse
k5: multi exec /home/danil/.config/mouseless/save-mark.sh shift-k5; layer mouse
k6: multi exec /home/danil/.config/mouseless/save-mark.sh shift-k6; layer mouse
k7: multi exec /home/danil/.config/mouseless/save-mark.sh shift-k7; layer mouse
k8: multi exec /home/danil/.config/mouseless/save-mark.sh shift-k8; layer mouse
k9: multi exec /home/danil/.config/mouseless/save-mark.sh shift-k9; layer mouse
k0: multi exec /home/danil/.config/mouseless/save-mark.sh shift-k0; layer mouse
#---
- name: goto-mark
passThrough: false
bindings:
q: multi exec /home/danil/.config/mouseless/goto-mark.sh q; layer mouse
w: multi exec /home/danil/.config/mouseless/goto-mark.sh w; layer mouse
e: multi exec /home/danil/.config/mouseless/goto-mark.sh e; layer mouse
r: multi exec /home/danil/.config/mouseless/goto-mark.sh r; layer mouse
t: multi exec /home/danil/.config/mouseless/goto-mark.sh t; layer mouse
y: multi exec /home/danil/.config/mouseless/goto-mark.sh y; layer mouse
u: multi exec /home/danil/.config/mouseless/goto-mark.sh u; layer mouse
i: multi exec /home/danil/.config/mouseless/goto-mark.sh i; layer mouse
o: multi exec /home/danil/.config/mouseless/goto-mark.sh o; layer mouse
p: multi exec /home/danil/.config/mouseless/goto-mark.sh p; layer mouse
leftbrace: multi exec /home/danil/.config/mouseless/goto-mark.sh leftbrace; layer mouse
rightbrace: multi exec /home/danil/.config/mouseless/goto-mark.sh rightbrace; layer mouse
a: multi exec /home/danil/.config/mouseless/goto-mark.sh a; layer mouse
s: multi exec /home/danil/.config/mouseless/goto-mark.sh s; layer mouse
d: multi exec /home/danil/.config/mouseless/goto-mark.sh d; layer mouse
f: multi exec /home/danil/.config/mouseless/goto-mark.sh f; layer mouse
g: multi exec /home/danil/.config/mouseless/goto-mark.sh g; layer mouse
h: multi exec /home/danil/.config/mouseless/goto-mark.sh h; layer mouse
j: multi exec /home/danil/.config/mouseless/goto-mark.sh j; layer mouse
k: multi exec /home/danil/.config/mouseless/goto-mark.sh k; layer mouse
l: multi exec /home/danil/.config/mouseless/goto-mark.sh l; layer mouse
semicolon: multi exec /home/danil/.config/mouseless/goto-mark.sh semicolon; layer mouse
apostrophe: multi exec /home/danil/.config/mouseless/goto-mark.sh apostrophe; layer mouse
backslash: multi exec /home/danil/.config/mouseless/goto-mark.sh backslash; layer mouse
z: multi exec /home/danil/.config/mouseless/goto-mark.sh z; layer mouse; layer mouse
x: multi exec /home/danil/.config/mouseless/goto-mark.sh x; layer mouse; layer mouse
c: multi exec /home/danil/.config/mouseless/goto-mark.sh c; layer mouse; layer mouse
v: multi exec /home/danil/.config/mouseless/goto-mark.sh v; layer mouse; layer mouse
b: multi exec /home/danil/.config/mouseless/goto-mark.sh b; layer mouse; layer mouse
n: multi exec /home/danil/.config/mouseless/goto-mark.sh n; layer mouse; layer mouse
m: multi exec /home/danil/.config/mouseless/goto-mark.sh m; layer mouse; layer mouse
comma: multi exec /home/danil/.config/mouseless/goto-mark.sh comma; layer mouse
dot: multi exec /home/danil/.config/mouseless/goto-mark.sh dot; layer mouse
slash: multi exec /home/danil/.config/mouseless/goto-mark.sh slash; layer mouse
k1: multi exec /home/danil/.config/mouseless/goto-mark.sh k1; layer mouse
k2: multi exec /home/danil/.config/mouseless/goto-mark.sh k2; layer mouse
k3: multi exec /home/danil/.config/mouseless/goto-mark.sh k3; layer mouse
k4: multi exec /home/danil/.config/mouseless/goto-mark.sh k4; layer mouse
k5: multi exec /home/danil/.config/mouseless/goto-mark.sh k5; layer mouse
k6: multi exec /home/danil/.config/mouseless/goto-mark.sh k6; layer mouse
k7: multi exec /home/danil/.config/mouseless/goto-mark.sh k7; layer mouse
k8: multi exec /home/danil/.config/mouseless/goto-mark.sh k8; layer mouse
k9: multi exec /home/danil/.config/mouseless/goto-mark.sh k9; layer mouse
k0: multi exec /home/danil/.config/mouseless/goto-mark.sh k0; layer mouse
leftshift: toggle-layer shift-goto-mark
rightshift: toggle-layer shift-goto-mark
- name: shift-goto-mark
passThrough: false
bindings:
q: multi exec /home/danil/.config/mouseless/goto-mark.sh Q; layer mouse
w: multi exec /home/danil/.config/mouseless/goto-mark.sh W; layer mouse
e: multi exec /home/danil/.config/mouseless/goto-mark.sh E; layer mouse
r: multi exec /home/danil/.config/mouseless/goto-mark.sh R; layer mouse
t: multi exec /home/danil/.config/mouseless/goto-mark.sh T; layer mouse
y: multi exec /home/danil/.config/mouseless/goto-mark.sh Y; layer mouse
u: multi exec /home/danil/.config/mouseless/goto-mark.sh U; layer mouse
i: multi exec /home/danil/.config/mouseless/goto-mark.sh I; layer mouse
o: multi exec /home/danil/.config/mouseless/goto-mark.sh O; layer mouse
p: multi exec /home/danil/.config/mouseless/goto-mark.sh P; layer mouse
leftbrace: multi exec /home/danil/.config/mouseless/goto-mark.sh leftcurlybrace; layer mouse
rightbrace: multi exec /home/danil/.config/mouseless/goto-mark.sh rightcurlybrace; layer mouse
a: multi exec /home/danil/.config/mouseless/goto-mark.sh A; layer mouse
s: multi exec /home/danil/.config/mouseless/goto-mark.sh S; layer mouse
d: multi exec /home/danil/.config/mouseless/goto-mark.sh D; layer mouse
f: multi exec /home/danil/.config/mouseless/goto-mark.sh F; layer mouse
g: multi exec /home/danil/.config/mouseless/goto-mark.sh G; layer mouse
h: multi exec /home/danil/.config/mouseless/goto-mark.sh H; layer mouse
j: multi exec /home/danil/.config/mouseless/goto-mark.sh J; layer mouse
k: multi exec /home/danil/.config/mouseless/goto-mark.sh K; layer mouse
l: multi exec /home/danil/.config/mouseless/goto-mark.sh L; layer mouse
semicolon: multi exec /home/danil/.config/mouseless/goto-mark.sh colon; layer mouse
apostrophe: multi exec /home/danil/.config/mouseless/goto-mark.sh doublequotes; layer mouse
backslash: multi exec /home/danil/.config/mouseless/goto-mark.sh pipe; layer mouse
z: multi exec /home/danil/.config/mouseless/goto-mark.sh Z; layer mouse; layer mouse
x: multi exec /home/danil/.config/mouseless/goto-mark.sh X; layer mouse; layer mouse
c: multi exec /home/danil/.config/mouseless/goto-mark.sh C; layer mouse; layer mouse
v: multi exec /home/danil/.config/mouseless/goto-mark.sh V; layer mouse; layer mouse
b: multi exec /home/danil/.config/mouseless/goto-mark.sh B; layer mouse; layer mouse
n: multi exec /home/danil/.config/mouseless/goto-mark.sh N; layer mouse; layer mouse
m: multi exec /home/danil/.config/mouseless/goto-mark.sh M; layer mouse; layer mouse
comma: multi exec /home/danil/.config/mouseless/goto-mark.sh lessthan; layer mouse
dot: multi exec /home/danil/.config/mouseless/goto-mark.sh greaterthan; layer mouse
slash: multi exec /home/danil/.config/mouseless/goto-mark.sh questionmark; layer mouse
k1: multi exec /home/danil/.config/mouseless/goto-mark.sh shift-k1; layer mouse
k2: multi exec /home/danil/.config/mouseless/goto-mark.sh shift-k2; layer mouse
k3: multi exec /home/danil/.config/mouseless/goto-mark.sh shift-k3; layer mouse
k4: multi exec /home/danil/.config/mouseless/goto-mark.sh shift-k4; layer mouse
k5: multi exec /home/danil/.config/mouseless/goto-mark.sh shift-k5; layer mouse
k6: multi exec /home/danil/.config/mouseless/goto-mark.sh shift-k6; layer mouse
k7: multi exec /home/danil/.config/mouseless/goto-mark.sh shift-k7; layer mouse
k8: multi exec /home/danil/.config/mouseless/goto-mark.sh shift-k8; layer mouse
k9: multi exec /home/danil/.config/mouseless/goto-mark.sh shift-k9; layer mouse
k0: multi exec /home/danil/.config/mouseless/goto-mark.sh shift-k0; layer mouse
I liked that thanks to mouseless, alt is no longer sent to other programs. Such a side effect. But I use shortcuts in i3wm, so in some cases i still have to send alt (for example, in line 47 I launch the browser). When i3wm notises a known shortcut, it doesn't skip alt either, so everything is fine, and libre office calc doesn't bother me with focusing on the menu anymore. :)
Unfortunately, there are shortcuts of the type "meta+alt+a", which cannot be bound in mouseless yet. I want to be able to move from the alt and meta layers to the altmeta layer, after which I could release one of the keys and end up in one of the layers. After releasing the next key, we would turn on the initial layer (and not always standard named "initial").
The key release event would partially solve the problem, but it probably does not fit into the mouseless concept. An exit event from a layer enabled by "toggle-layer" would also partially solve the problem. However, I would like to entrust the layer management to mouseless.
I'm not sure what distro you use, but AUR could reach more users.
I use the the config below and wanted to use 1-4 for navigating tabs in my browser. However, I wanted 1 to be back, but mouseless
needs to be configured with 2 before the command is bound to 1. Therefore, the command bound to 5 is on 4 and 3 on 2. So, all the keys are +1.
# the default speed for mouse movement and scrolling
baseMouseSpeed: 750.0
baseScrollSpeed: 20.0
# the time it takes to accelerate to baseMouseSpeed (in ms), 0 to reach top speed immediately
mouseAccelerationTime: 200.0
# the shape of the acceleration curve, 1.0 is linear, higher values have more time at low speeds
mouseAccelerationCurve: 2.0
# speed of the mouse when it starts moving
startMouseSpeed: 0.0
# same for deceleration
mouseDecelerationTime: 300.0
mouseDecelerationCurve: 3.0
layers:
- name: initial
bindings:
leftalt: toggle-layer mouse
- name: mouse
passThrough: false
bindings:
g: reload-config
leftshift: button left
capslock: button middle
tab: button right
d: move 1 0
a: move -1 0
s: move 0 1
w: move 0 -1
r: scroll up
f: scroll down
# Qutebrowser
q: leftshift+h
e: leftshift+l
2: leftshift+k
3: d
4: u
5: leftshift+j
Running mouseless -v on the latest release's binary gets me 0.1.0. I'm not sure if this is just that that command wasn't updated properly or if the binary hasn't been updated?
Currently mouseless want you to specify which keyboard it can work with using the config file (the first item in sample config). Is it possible to make it work with all keyboard regardless of its id/path?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.