ReimuNotMoe / ydotool

Generic command-line automation tool (no X!)
GNU Affero General Public License v3.0
1.5k stars 79 forks source link

Technical question (for creating PPA & using for touchpad gestures) #25

Open swanux opened 5 years ago

swanux commented 5 years ago

Hello, I'd like to make a PPA for Ubuntu/Debian based distros of your project. My question is, what this program uses from boost-libs? Because Debian based distros hasn't got a separate boost-libs package so I need to intall the complete libboost-all-dev to be sure that the required function is included, but it's over 500MB.

Thank you in advance, Daniel

ReimuNotMoe commented 5 years ago

Only libboost-program-options-dev is needed.

swanux commented 5 years ago

Thank you! Another question. I've built the program but it says:

ydotool: error while loading shared libraries: libydotool.so: cannot open shared object file: No such file or directory

The commands were: mkdir build && cd build && cmake .. && make && sudo make install It installs everything to /usr/local/ instead of /usr/ (on Arch it places everything inside /usr/).

I've tried a workaround (placed everything inside /usr/ like on Arch), and the error disappeard. However it produces the following output:

ydotool: library search path: /usr/local/lib/ydotool:/usr/lib/ydotool:/usr/lib/x86_64-linux-gnu/ydotool:/usr/lib/i386-linux-gnu/ydotool

ydotool: notice: ydotoold backend unavailable, using direct method (has latency+delay issues!) terminate called after throwing an instance of 'std::runtime_error' what(): failed to open uinput device Aborted (core dumped)

ClassicOldSong commented 5 years ago

Checkout https://github.com/ReimuNotMoe/ydotool/issues/24

swanux commented 5 years ago

As I mentioned the workaround worked, but produced another error. Same with symlinks.

ydotool: library search path: /usr/local/lib/ydotool:/usr/lib/ydotool:/usr/lib/x86_64-linux-gnu/ydotool:/usr/lib/i386-linux-gnu/ydotool

ydotool: notice: ydotoold backend unavailable, using direct method (has latency+delay issues!) terminate called after throwing an instance of 'std::runtime_error' what(): failed to open uinput device Aborted

gapeevanton commented 5 years ago

First of all, thanks to author for this great automation tool.

ydotool: library search path: /usr/local/lib/ydotool:/usr/lib/ydotool:/usr/lib/x86_64-linux-gnu/ydotool:/usr/lib/i386-linux-gnu/ydotool ydotool: notice: ydotoold backend unavailable, using direct method (has latency+delay issues!) terminate called after throwing an instance of 'std::runtime_error' what(): failed to open uinput device Aborted

I am on Fedora 29 and do this commands:

sudo usermod -a -G users $USER echo "KERNEL==\"uinput\", GROUP=\"users\", MODE=\"0660\", OPTIONS+=\"static_node=uinput\"" | sudo tee /etc/udev/rules.d/80-uinput.rules > /dev/null

Reboot

Check:

ls -l /dev/uinput

Should output smth like:

crw-rw----. 1 root users 10, 223 Sep 27 11:23 /dev/uinput'

ClassicOldSong commented 5 years ago

As I mentioned the workaround worked, but produced another error. Same with symlinks.

ydotool: library search path: /usr/local/lib/ydotool:/usr/lib/ydotool:/usr/lib/x86_64-linux-gnu/ydotool:/usr/lib/i386-linux-gnu/ydotool ydotool: notice: ydotoold backend unavailable, using direct method (has latency+delay issues!) terminate called after throwing an instance of 'std::runtime_error' what(): failed to open uinput device Aborted

O wait, did you run ydotool with root permission? For it'll create a fake input device, it needs root in order to work.

ClassicOldSong commented 5 years ago

First of all, thanks to author for this great automation tool.

ydotool: library search path: /usr/local/lib/ydotool:/usr/lib/ydotool:/usr/lib/x86_64-linux-gnu/ydotool:/usr/lib/i386-linux-gnu/ydotool ydotool: notice: ydotoold backend unavailable, using direct method (has latency+delay issues!) terminate called after throwing an instance of 'std::runtime_error' what(): failed to open uinput device Aborted

I am on Fedora 29 and do this commands:

sudo usermod -a -G users $USER echo "KERNEL==\"uinput\", GROUP=\"users\", MODE=\"0660\", OPTIONS+=\"static_node=uinput\"" | sudo tee /etc/udev/rules.d/80-uinput.rules > /dev/null

Reboot

Check:

ls -l /dev/uinput

Should output smth like:

crw-rw----. 1 root users 10, 223 Sep 27 11:23 /dev/uinput'

This could be less secure if you do so for any application may able to type anything from the uinput device using your username/group.

swanux commented 5 years ago

Thank you @gapeevanton ! Now it works. There is still error in the output but it works without problems.

ydotool: library search path: /usr/local/lib/ydotool:/usr/lib/ydotool:/usr/lib/x86_64-linux-gnu/ydotool:/usr/lib/i386-linux-gnu/ydotool

ydotool: notice: ydotoold backend unavailable, using direct method (has latency+delay issues!) ydotool: debug: tool `key' constructed at 0x562efbb14460 argc = 3 argv[1] = send argv[2] = Ctrl+Alt+Right

Regarding security, I agree with you @ClassicOldSong . The problem is that I'd like to use this for some touchpad gestures so I won't be able to run everytime as root. Any idea for that?

swanux commented 5 years ago

And what is ydotool backend which is unavailable? Because I can see that it really affects the speed of the tool.

ReimuNotMoe commented 5 years ago

And what is ydotool backend which is unavailable? Because I can see that it really affects the speed of the tool.

See https://github.com/ReimuNotMoe/ydotool/issues/5

ReimuNotMoe commented 5 years ago

This project is really lack of some docs and I feel very sorry for that. I'll work on these when I squeezed more time.

swanux commented 5 years ago

Ah, ok, I see now. I could have thought of it. And regarding the permissions problem have you got any idea? (for touchpad gestures)

swanux commented 5 years ago

Here's a .deb file @ReimuNotMoe that you can test, and tell me if I can upload it. It doesn't contain that modification with permissions because of the security. https://file.io/rfddYw

ClassicOldSong commented 5 years ago

Here's a .deb file @ReimuNotMoe that you can test, and tell me if I can upload it. It doesn't contain that modification with permissions because of the security. https://file.io/rfddYw

link 404 not found

swanux commented 5 years ago

File.io... Sometimes it's just nonsense how it behaves.. Here's another link. Hopefully it'll work as expected. https://mega.nz/#!pSBTjKCD!75lCCcLbnriKg-ZIoE2PJi7o7kSKdh0leuWTvqQRIXQ Tell me whether it works or not.

ReimuNotMoe commented 5 years ago

File.io... Sometimes it's just nonsense how it behaves.. Here's another link. Hopefully it'll work as expected. https://mega.nz/#!pSBTjKCD!75lCCcLbnriKg-ZIoE2PJi7o7kSKdh0leuWTvqQRIXQ Tell me whether it works or not.

Sorry for the delay.

AFAIK, the architecture should be 'amd64' instead of 'all'...

Personally I would like to just use Gitlab CI for debian-ish packages.

What the users want is simply running apt-add-repository from terminal, and get the software installed. However, this requires a PPA, and creating a PPA is really a pain.

Thank you very much anyway.

swanux commented 5 years ago

I've never heard about gitlab ci before so I've googled it. It's really amazing! It's much more comfortable than building everything manually (I also use build tools, but just some basic self written stuff).

Regarding the PPA, it's really simple with launchpad. You can easily manage it with nearly zero in-terminal stuff. Or if you would like to have your own apt repo, you can do that also simply with github.

p4vook commented 3 years ago

I've created a controller for ydotool, that simply transfers commands to ydotool, launching it as root. https://github.com/pavel-the-best/ydotool-controller. Usage: launch daemon (ydotool_controllerd) as root, use client (ydotool_controller) with arguments that should be passed to ydotool.

sharpordie commented 2 years ago

For those who would like to have the latest version of ydotool on Ubuntu.

Tested under Impish (21.10) and Jammy (22.04).

# Handle the dependencies.
sudo apt install -y build-essential cmake git libboost-program-options-dev scdoc

# Handle the installation.
current="$(dirname "$(readlink -f "${0}")")" && git clone https://github.com/ReimuNotMoe/ydotool.git
cd ydotool && mkdir build && cd build && cmake .. && make && sudo make install
cd "${current}" && source "{HOME}/.bashrc" && rm -rf ydotool
tomeeeS commented 2 years ago

"sudo apt install -y build-essential cmake git libboost-program-options-dev scdoc"

I suggest putting this in the readme. Make was failing and I almost quit installing this tool. Likewise there's no mention of the usage of the ydotoold daemon.