LINUX.ORG.RU

NixOS: лечение MTP+KDE

 , ,


0

1

В продолжение темы Скопировать файлы между Android телефонами

Итак, удалось выяснить вот что, и несколько продвинуться в данном вопросе. Задаю вопросы к гуру по NixOS как лучше эти фиксы в nixpkgs сделать и оформить.

  1. В деривации kio-extras создается dbus service файл, который дергает бинарник демона kiod не из той деривации. Поэтому kio-extras, а в его составе и поддержка mtp, вообще не работает. Тут вопрос - как грамотно решить эту ситуацию в https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/kde/kio-extras.nix. В какую фазу что лучше добавить, чтобы заменить в файле
$out/share/dbus-1/services/org.kde.kmtpd5.service

строчку

Exec=и-что-там

на

Exec=${kio}/libexec/kf5/kiod5
  1. Далее проблема - пакет https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/libmtp/default.nix должен добавить udev rule, и при этом он имеет три выхода - bin, dev, out. Правило udev лежит в out, но ищет сборка его почему-то в bin. В результате правило не добавляется, телефон не помечается как mtp устройство и solid (из KDE) его вообще не видит.

Пока решил это так в configuration.nix:

services.udev.packages = [ pkgs.libmtp.out ];

Как это решить более лучше, поправив пакет в nixpkgs? Я так думаю что лучше, если сам пакет libmtp будет правильно добавлять правило из себя, но я не до конца понял как оно работает.

После исправления проблем 1 и 2 все работает! Прошу помочь поправить nixpkgs и подсказать как оформлять пулл реквест.

★★★

Последнее исправление: James_Holden (всего исправлений: 4)

Прошу помочь поправить nixpkgs и подсказать как оформлять пулл реквест.

Так создай Issue у них в репе и спроси.

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Не солидно такими пустяковыми вопросами туда сразу лезть.

James_Holden ★★★
() автор топика
$ cat /nix/store/8zgp9vjn7qnpzn7fdqa45n0xwrpi2mdr-kio-extras-21.12.0/share/dbus-1/services/org.kde.kmtpd5.service
[D-BUS Service]
Name=org.kde.kmtpd5
Exec=/nix/store/8zgp9vjn7qnpzn7fdqa45n0xwrpi2mdr-kio-extras-21.12.0/libexec/kf5/kiod5

Вроде же всё правильно, или я чего-то не понимаю?

Exec=$out/share/dbus-1/services/org.kde.kmtpd5.service

Я сильно сомневаюсь, что если засунуть в юнит-файл в Exec путь на самого себя, то это что-то починит. В Exec должен быть путь к бинарнику.

Далее проблема - пакет https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/libmtp/default.nix должен добавить udev rule

Пакеты никуда ничего не добавляют, этим занимаются модули NixOS и именно там нужно чинить, а не в пакете.

Tsukasa
()
Ответ на: комментарий от Tsukasa
$ grep libmtp -r nixos
nixos/modules/services/desktops/gvfs.nix:    services.udev.packages = [ pkgs.libmtp.out ];
nixos/modules/services/x11/desktop-managers/plasma5.nix:        pkgs.libmtp

Собственно вот в модуле плазмы и видно, что там не то что нужно: https://github.com/NixOS/nixpkgs/blob/229298c6debb8a6532c571ec493fa137be0a85e8/nixos/modules/services/x11/desktop-managers/plasma5.nix#L397

Tsukasa
()
Ответ на: комментарий от Tsukasa

Вроде же всё правильно, или я чего-то не понимаю?

Нет, не правильно - Exec= должно указывать на деривацию kio, а не kio-extras. Файла kiod5 по пути как у тебя просто нет, можешь проверить.

Я сильно сомневаюсь, что если засунуть в юнит-файл в Exec путь на самого себя, то это что-то починит. В Exec должен быть путь к бинарнику.

Да, я баран неправильно сюда скопировал. Точно. Надо так

Exec=${kio}/libexec/kf5/kiod5

Пакеты никуда ничего не добавляют, этим занимаются модули NixOS и именно там нужно чинить, а не в пакете.

Спасибо, пост выше многое прояснил.

James_Holden ★★★
() автор топика
Последнее исправление: James_Holden (всего исправлений: 1)
Ответ на: комментарий от James_Holden

Судя по тому, что творится в пакетах убунты - в kio-extras не должно быть никаких юнитов:

https://packages.ubuntu.com/jammy/amd64/kio/filelist

https://packages.ubuntu.com/jammy/amd64/kio-extras/filelist

При этом в апстриме они есть:

https://github.com/KDE/kio-extras/blob/a41d34385b63062f167037beb370145d5089ae45/mtp/kiod_module/CMakeLists.txt#L32

Думаю тебе нужно понять, почему в убунтовском пакете их нет и сделать так же в nixpkgs.

Tsukasa
()
Ответ на: комментарий от Tsukasa

В убунте просто. Нужный сервис org.kde.kmtpd5.service лежит в пакете kio-extras-data (все равно не в kio). То есть он как-бы в kio-extras но еще отдельно, во имя религии дебиана все дробить.

https://packages.ubuntu.com/impish/all/kio-extras-data/filelist

Учитывая это, лично я не вижу особого смысла в nixpkgs выносить это в отдельный пакет. Технически это ничего не поменяет - надо все равно запускать kiod5 из другой деривации.

James_Holden ★★★
() автор топика
Ответ на: комментарий от James_Holden

Технически это ничего не поменяет - надо все равно запускать kiod5 из другой деривации.

Правильный share/dbus-1/services/org.kde.kiod5.service уже есть в пакете kio.

Tsukasa
()
Последнее исправление: Tsukasa (всего исправлений: 1)
Ответ на: комментарий от Tsukasa

Еще раз поясню - нужен не

share/dbus-1/services/org.kde.kiod5.service

а

share/dbus-1/services/org.kde.kmtpd5.service

Они запускают один и тот же бинарник, но это разные сервисы dbus. Так уж устроено kio. Для подключения к MTP дергается именно сервис kmtpd5. При этом максимально логично чтобы org.kde.kmtpd5.service находился в пакете kio-extras, потому что так в аппстриме сделано.

James_Holden ★★★
() автор топика
Ответ на: комментарий от Tsukasa

Спасибо за помощь. Мой пулл-реквест приняли в master, вроде теперь проблема решена для всех.

James_Holden ★★★
() автор топика

лечение

NixOS – дистрибутив для врачей.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.