Экспериментально для bash /proc/{pid}/fd/255
— это ссылка на полный путь исполняемого скрипта.
#! /bin/bash
ls -l /proc/$$/fd/255
Это должно работать в Debian:
Вы можете создать простой скрипт, который определяет, работает ли машина под управлением X11 или Wayland:
loginctl show-session $(loginctl show-user $(whoami) -p Display --value) -p Type --value
Может возвращать либо X11
, либоWayland
(Также может возвращатьtty
)
Поэтому:
if [[ $(loginctl show-session $(loginctl show-user $(whoami) -p Display --value) -p Type --value) = 'wayland' ]]; then
export QT_QPA_PLATFORM=wayland
fi
Вы также можете просто проверить, использует ли ваш сеанс $DISPLAY
или $WAYLAND_DISPLAY
в качестве одной из переменных среды.
В bash вы можете поместить сценарии, которые вы хотите, чтобы все пользователи выполняли после входа в систему, в /etc/profile.d
. Не забудьте сделать его исполняемым и убедитесь, что у него есть расширение .sh
.
Я наткнулся на обсуждение systemd , которое привело меня к возможному ответу. (Извините, что отвечаю на собственный вопрос.)
Какие файлы выполняются при каких именно условиях при запуске мне до сих пор неясно, но по крайней мере в моей системе файл /etc/profile
похоже выполняется при запуске Gnome (, в том числе при запуске Wayland ). Он, в свою очередь, выполняет файлы под /etc/profile.d/
. Взяв пример с файлом im-config_wayland.sh
, я создал файл /etc/profile.d/wayland.sh
, который устанавливает переменные среды, которые я хочу, условно, в зависимости от того, запущен ли Wayland. Вот его содержание.
test "$XDG_SESSION_TYPE" = 'wayland' || return
export QT_QPA_PLATFORM=wayland
Подозреваю, что существуют более элегантные решения, например, не устанавливающие эти переменные при работе не -графических оболочек. Но, по крайней мере, этот подход решает мою конкретную проблему на данный момент…