Вопрос или проблема
Я работаю в WSL Ubuntu-20.04. У меня установлен emacs 30.1 через flatpak.
У меня также установлен исполняемый файл haskell-language-server-wrapper
. Я могу подтвердить, что он находится в моем пути:
which haskell-language-server-wrapper
~/.ghcup/bin/haskell-language-server-wrapper
Поскольку это сервер языка, emacs нуждается в доступе к нему. Когда я открываю файл Haskell в emacs, я получаю ошибку
Error in post-command-hook
...
[glot] (warning] Searching for program: No such file or directory, haskell-language-server-wrapper
Я подумал, что это может быть связано с разрешениями песочницы и подобным, поэтому, следуя этому посту, я попытался добавить конкретный исполняемый файл к разрешениям файловой системы flatpak:
sudo flatpak override org.gnu.emacs --filesystem="~/.ghcup/bin/haskell-language-server-wrapper"
Я могу подтвердить, что это разрешение было добавлено с помощью
flatpak override --show org.gnu.emacs
[Context]
filesystems=/home/r/.ghcup/bin/haskell-language-server-wrapper;
Тем не менее, я все равно получаю ту же ошибку. Я также просто попробовал добавить родительский каталог к разрешениям файловых систем, но это тоже не сработало.
У меня настроен сервер языка Haskell на другом компьютере, работающем на Fedora (без WSL) и с использованием не-flatpak версии emacs, без каких-либо проблем. Поэтому сейчас я не знаю, является ли это проблемой flatpak, emacs, сервера языка Haskell или WSL. Любая помощь была бы признательна.
Ответ или решение
Установка программного обеспечения через Flatpak на Windows Subsystem for Linux (WSL) может вызвать ряд сложностей, особенно когда дело касается интеграции приложения с внешними инструментами или программами. Этот вопрос о невозможности файла emacs, установленного через Flatpak, найти исполняемый файл «haskell-language-server-wrapper», требует тщательного анализа множества аспектов: авторизация на уровне файловой системы Flatpak, переменные окружения, специфические для WSL, а также общая конфигурация Emacs и Haskell Language Server.
Теория:
Flatpak — это система для дистрибуции программного обеспечения, которая изолирует приложение в контейнере, обеспечивая управляемую и контролируемую среду для исполнения. Хотя это приносит пользу с точки зрения безопасности и совместимости, это также порождает некоторые ограничения. Например, доступ к файловой системе и переменным окружения строго ограничен, что требует явной настройки разрешений для взаимодействия с внешними ресурсами.
Проблема:
Ваш Emacs, запущенный через Flatpak, не может найти «haskell-language-server-wrapper», даже после добавления разрешений доступа к его директории в Flatpak. Обычно это связано с ограничениями, наложенными Flatpak, которые препятствуют доступу к программам и директориям вне его собственной песочницы.
Пример:
Вы добавили разрешение для конкретного исполняемого файла и даже для всей его директории, используя команду flatpak override. Однако, Emacs всё равно не может обнаружить путь к целевому файлу. Это может быть связано с различными факторами, такими как различия в PATH внутри Flatpak и основной системы, или необходимость пересохранения настроек Emacs для корректного указания на этот исполняемый файл.
Применение:
Для предоставления Emacs доступ к нужному исполняемому файлу через Flatpak на WSL, выполните следующие шаги:
-
Подтвердите доступ к директории:
Убедитесь, что вы предоставили нужную директорию в Flatpak. Вы могли бы попробовать более общий доступ, например,~/.ghcup
целиком:sudo flatpak override org.gnu.emacs --filesystem=home
-
Убедитесь в правильности переменных окружения:
Flatpak может использовать свою собственную версию PATH. Попробуйте передать конкретный PATH или скопировать PATH из вашей основой системы. Это можно сделать в файле профиля Emacs:(setenv "PATH" (shell-command-to-string "echo $PATH"))
-
Проверьте конфигурации Emacs:
Убедитесь, что Emacs правильно настроен для использования «haskell-language-server-wrapper». Проверьте настройки «lsp-mode» или других расширений Haskell. -
Дополнительные шаги по отладке:
- Попробуйте запустить Emacs из командной строки и вручную указать PATH для запуска Haskell сервера.
- Проверьте, не содержится ли в режиме песочницы Flatpak какие-либо полезные для отладки логов, которые могут указать на конкретную проблемную зону.
-
Альтернативные решения:
Пересмотрите возможность установки Emacs не через Flatpak, а путем классической установки в вашей WSL среде напрямую, если отделение функций безопасностью Flatpak менее критично, чем гибкость конфигурации. -
Свяжитесь с сообществом:
Если предыдущие шаги не привели к успешному решению, обратитесь за помощью к комьюнити Flatpak, Emacs или Haskell. Часто разработчики и пользователи могут предоставить полезные рекомендации или обсудить менее очевидные области конфигурации.
В заключение, проблема, с которой вы столкнулись, часто решается путем детальной настройки разрешений и путей в окружении Flatpak, а также путем доработки конфигурации внешнего программного обеспечения в Emacs. Удачи вам в решении данной задачи!