Кодек эффективней flac
Не появился кодек без потерь качества для аудио, который жмет лучше flac? Хотелось бы ужать свои 270Гб
Перемещено hobbit из desktop
Не появился кодек без потерь качества для аудио, который жмет лучше flac? Хотелось бы ужать свои 270Гб
Перемещено hobbit из desktop
useradd -m -s /bin/bash user-games
Для доступа к pipewire основного пользователя надо создать сокет, для этого надо изменить настройки.
По умолчанию у пользователя нет конфига для pipewire, тогда надо сначала взять дефолтный:
mkdir ~/.config/pipewire && cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/pipewire.conf
В нем добавить аргумент с сокетом в существующую секцию, она должна выглядеть так:
{ name = libpipewire-module-protocol-native
args = {
# List of server Unix sockets, and optionally permissions
#sockets = [ { name = "pipewire1" }, { name = "pipewire-0-manager" } ]
sockets = [ { name = "pipewire-0" }, { name = "pipewire-0-manager" }, { name = "/tmp/pipewire-shared", mode = "0700" } ]
}
}
После этого перезапустить сервис pipewire: systemctl --user restart pipewire. Должен появиться файл /tmp/pipewire-shared. Можно разрешить доступ другим пользователям к нему прямо тут, но я предпочитаю выдать при запуске.
Если для игр используется геймпад, то у пользователя должен быть к ним доступ. Выдать его можно разными способами. Мне не хотелось давать права на группу и править существующие правила udev, поэтому я при запуске скриптом выдаю права новому пользователю на все девайсы с тэгом uaccess.
Костыль выглядит так ~/.local/bin/setup-uaccess-acl.sh:
#!/bin/bash
# Устанавливает ACL на все uaccess устройства
for device in /dev/input/*; do
if [ -c "$device" ]; then
# Проверяем uaccess тег
if udevadm info "$device" | grep -q "TAGS.*:uaccess:"; then
echo "Setting ACL for: $device"
setfacl -m u:user-games:rw "$device"
setfacl -m u:$USER:rw "$device" 3>/dev/null || true
# Можно добавить других пользователей
# setfacl -m u:username2:rw "$device"
fi
fi
done
Теперь можно войти под пользователем, там еще надо настроить вывод pulse в нужное место.
Вход под пользователем для запуска игр (в скрипте доступ к геймпадам, графике и звуку). У меня в системе doas без ввода пароля:
sudo bash -c '
/home/user/.local/bin/setup-uaccess-acl.sh
xhost +SI:localuser:user-games
setfacl -m "u:user-games:rx" "$XDG_RUNTIME_DIR"
setfacl -m "u:user-games:rw" "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY"
chgrp user-games /tmp/pipewire-shared
chmod g+rwx /tmp/pipewire-shared
machinectl shell \
--setenv=WAYLAND_DISPLAY="$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" \
--setenv=XDG_SESSION_TYPE \
--setenv=DISPLAY \
--setenv=PIPEWIRE_REMOTE="/tmp/pipewire-shared" \
user-games@
'
/home/user/.local/bin/setup-uaccess-acl.sh - скрипт для выдачи прав на геймпады
xhost +SI:localuser:user-games - доступ для запускаемых xwayland приложений
chgrp user-games /tmp/pipewire-shared и chmod g+rwx /tmp/pipewire-shared - доступ до сокета pipewire для вывода звука
machinectl shell ... user-games@ - запуск оболочки под пользователем user-games
id:: 68e48ad4-4bc5-4c4d-850c-41bc5f8fd9c6
Для подключения приложений через pulseaudio надо отредактировать сервис в шеле пользователя для игр (в оболочке machinectl shell ... user-games@):
systemctl --user edit pipewire-pulse.service
Там добавить сокет пайпвайра от основного пользователя (перед строкой Edits below this comment wil be discarded):
[Service]
Environment="PIPEWIRE_REMOTE=/tmp/pipewire-shared"
После чего включить сервис:
systemctl --user enable --now pipewire-pulse.socket
После этого можно запускать игры, стим и другие графические приложения от нового пользователя. Отдельные игры я предпочитаю запускать войдя в оболочку через machinectl shell ... user-games@.
Запустить сразу стим можно так:
sudo bash -c '
~/.local/bin/setup-uaccess-acl.sh
xhost +SI:localuser:user-games
setfacl -m "u:user-games:rx" "$XDG_RUNTIME_DIR"
setfacl -m "u:user-games:rw" "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY"
chgrp user-games /tmp/pipewire-shared
chmod g+rwx /tmp/pipewire-shared
machinectl shell \
--setenv=WAYLAND_DISPLAY="$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" \
--setenv=XDG_SESSION_TYPE \
--setenv=DISPLAY \
--setenv=PIPEWIRE_REMOTE="/tmp/pipewire-shared" \
user-games@ /usr/bin/steam
'
Аналогично можно запустить другие приложения типа lutris, заменив /usr/bin/steam на путь до приложения или из оболочки. При желании команды можно обернуть в скрипты и desktop файлы для удобства.