diff --git a/README.md b/README.md index 29ce1b4..f354e8a 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,41 @@ systemctl --user enable --now ydotool # needed for auto-paste dikte # the settings window opens on first run ``` +On Fedora KDE the packages are named differently, and `ydotool` takes one step +more: + +```sh +sudo dnf install pipewire-utils wl-clipboard ydotool ffmpeg-free python3-pyqt6 +``` + +Fedora ships `ydotool` as a system service rather than a user one, and +`ydotoold` then listens on a root-owned socket your session cannot write to, so +auto-paste fails with the daemon running. Point it instead at the path the +`ydotool` client already looks at, and hand the socket over: + +```sh +sudo mkdir -p /etc/systemd/system/ydotool.service.d +printf '[Service]\nExecStart=\nExecStart=/usr/bin/ydotoold --socket-path=%s/.ydotool_socket --socket-own=%s:%s\n' \ + "$XDG_RUNTIME_DIR" "$(id -u)" "$(id -g)" \ + | sudo tee /etc/systemd/system/ydotool.service.d/override.conf >/dev/null +sudo systemctl daemon-reload +sudo systemctl enable --now ydotool +``` + +That runtime directory belongs to your login session, so after a reboot the +service restarts until you are logged in and only then settles. `ffmpeg-free` +out of Fedora's own repositories is enough, RPM Fusion not needed: what the +free build leaves out is H.264 and HEVC video decoding, and Dikte only ever +takes the audio track of a video file, whose AAC, MP3 and Opus decoders are all +there. + +The models that run on this machine need nothing added either. Those releases +are built on Ubuntu and run here as they are, and KWin links `libvulkan.so.1` +itself, so a Plasma desktop already has the loader that decides whether +llama.cpp arrives in its Vulkan build, with the Mesa drivers alongside it. +whisper.cpp publishes no GPU build for Linux at all and transcribes on the +processor wherever it runs. + On Ubuntu/GNOME X11, recording uses PulseAudio and clipboard/paste use the X11 tools instead: diff --git a/README.tr.md b/README.tr.md index 38c4639..30c1eb3 100644 --- a/README.tr.md +++ b/README.tr.md @@ -29,6 +29,39 @@ systemctl --user enable --now ydotool # otomatik yapıştırma için dikte # ilk açılışta ayarlar penceresi gelir ``` +Fedora KDE'de paket adları farklı, `ydotool` da bir adım fazla istiyor: + +```sh +sudo dnf install pipewire-utils wl-clipboard ydotool ffmpeg-free python3-pyqt6 +``` + +Fedora `ydotool`'u kullanıcı servisi değil sistem servisi olarak kuruyor; +`ydotoold` de root'a ait bir sokete bağlanıyor, oturumun oraya yazamadığı için +servis çalışırken bile otomatik yapıştırma tutmuyor. Soketi `ydotool` +istemcisinin zaten baktığı yola al ve sahipliğini devret: + +```sh +sudo mkdir -p /etc/systemd/system/ydotool.service.d +printf '[Service]\nExecStart=\nExecStart=/usr/bin/ydotoold --socket-path=%s/.ydotool_socket --socket-own=%s:%s\n' \ + "$XDG_RUNTIME_DIR" "$(id -u)" "$(id -g)" \ + | sudo tee /etc/systemd/system/ydotool.service.d/override.conf >/dev/null +sudo systemctl daemon-reload +sudo systemctl enable --now ydotool +``` + +O çalışma dizini oturumuna ait olduğu için yeniden başlatmanın ardından servis +sen giriş yapana kadar kendini yeniden deneyip ondan sonra oturuyor. Fedora'nın +kendi depolarındaki `ffmpeg-free` yetiyor, RPM Fusion gerekmiyor: özgür yapının +dışarıda bıraktığı şey H.264 ve HEVC video çözümü, Dikte ise video dosyasının +yalnızca ses izini alıyor; onun AAC, MP3 ve Opus çözücüleri yapının içinde. + +Bu makinede koşan modeller için de eklenecek bir şey yok. O sürümler Ubuntu'da +derleniyor ve burada olduğu gibi çalışıyor; `libvulkan.so.1`'i KWin'in kendisi +bağladığı için Plasma masaüstünde llama.cpp'nin Vulkan yapısıyla gelip +gelmeyeceğini belirleyen yükleyici zaten kurulu, Mesa sürücüleri de onunla +birlikte geliyor. whisper.cpp ise Linux için hiç GPU yapısı yayımlamıyor, +nerede çalışırsa çalışsın işlemcide çeviriyor. + Ubuntu/GNOME X11 için kayıt PulseAudio üzerinden, pano ve yapıştırma ise X11 araçlarıyla çalışır: diff --git a/install.sh b/install.sh index c55e5b8..de99f48 100755 --- a/install.sh +++ b/install.sh @@ -40,21 +40,38 @@ python3 -c 'import PyQt6.QtWidgets' 2>/dev/null || missing+=("python-pyqt6") if ((${#missing[@]})); then warn "Missing: ${missing[*]}" - say "Ubuntu X11: sudo apt install pulseaudio-utils xclip xdotool ffmpeg" - say "Arch Wayland: sudo pacman -S --needed pipewire-audio wl-clipboard ydotool ffmpeg python-pyqt6" + say "Ubuntu X11: sudo apt install pulseaudio-utils xclip xdotool ffmpeg" + say "Arch Wayland: sudo pacman -S --needed pipewire-audio wl-clipboard ydotool ffmpeg python-pyqt6" + say "Fedora Wayland: sudo dnf install pipewire-utils wl-clipboard ydotool ffmpeg-free python3-pyqt6" echo else ok "All dependencies present" fi # 2. ydotoold -------------------------------------------------------------- +# What auto-paste needs is a socket it may write to, which is not the same +# question as whether the unit is up: Fedora ships ydotool as a system service +# only, and its socket stays root-owned at mode 600, so there the daemon can be +# running while every paste is refused. if [[ "${XDG_SESSION_TYPE:-}" != "x11" ]] && command -v ydotool >/dev/null; then - if systemctl --user is-active --quiet ydotool 2>/dev/null \ - || systemctl --user is-active --quiet ydotoold 2>/dev/null; then + socket="${YDOTOOL_SOCKET:-${XDG_RUNTIME_DIR:-/tmp}/.ydotool_socket}" + if [[ -w "$socket" ]]; then ok "ydotoold is running (auto-paste ready)" + elif systemctl is-active --quiet ydotool 2>/dev/null; then + warn "ydotoold runs as a system service, whose socket is not yours to" + say "write to. Hand it over in /etc/systemd/system/ydotool.service.d/" + say "override.conf, which is what the README's Fedora section does:" + say " [Service]" + say " ExecStart=" + say " ExecStart=/usr/bin/ydotoold --socket-path=$socket --socket-own=$(id -u):$(id -g)" + say "then sudo systemctl daemon-reload && sudo systemctl restart ydotool" + elif systemctl --user is-active --quiet ydotool 2>/dev/null \ + || systemctl --user is-active --quiet ydotoold 2>/dev/null; then + warn "ydotoold is running, but it did not put its socket at $socket" + say "Point Dikte at the one it did make: export YDOTOOL_SOCKET=..." else warn "ydotoold is not running, auto-paste will not work" - say "systemctl --user enable --now ydotool" + say "systemctl --user enable --now ydotool (on Fedora: see the README)" fi fi