Необходимо сказать ld
где искать библиотеку, так как это не находится в одном из каталогов по умолчанию. Так как компоновщиком вызывают gcc
, используйте последнего -L
опция.
gcc -lrtadb -L/usr/local/lib/rta-0.8.1/src
должен сделать это в Вашем случае.
Думаю, что это можно узнать, опросив переменную окружения [114029]$DESKTOP_SESSION[114030]. Я не совсем уверен, насколько это поддерживается, но в моем ограниченном тестировании это, кажется, доступно на Fedora & Ubuntu.
Другой вариант - переменная [114031]$XDG_SESSION_DESKTOP[114032].
Метод #2 - wmctrl
Также существует этот метод, использующий [114033]wmctrl[114034].
Ссылки
Как определить, какой оконный менеджер работает
Пока, кажется, лучше всего взять на себя инициативу от [115236]$XDG_CURRENT_DESKTOP[115237], когда эта переменная будет определена. Если нет, то [115238]$XDG_DATA_DIRS[115239] может предоставить желаемую информацию, больше чем первая буква [115240]${DESKTOP_SESSION:0:1}[115241].[114806].
Вы можете использовать этот сценарий bash . Он может определять имя и версию среды рабочего стола.
#!/bin/bash
function detect_gnome()
{
ps -e | grep -E '^.* gnome-session$' > /dev/null
if [ $? -ne 0 ];
then
return 0
fi
VERSION=`gnome-session --version | awk '{print $2}'`
DESKTOP="GNOME"
return 1
}
function detect_kde()
{
ps -e | grep -E '^.* kded4$' > /dev/null
if [ $? -ne 0 ];
then
return 0
else
VERSION=`kded4 --version | grep -m 1 'KDE' | awk -F ':' '{print $2}' | awk '{print $1}'`
DESKTOP="KDE"
return 1
fi
}
function detect_unity()
{
ps -e | grep -E 'unity-panel' > /dev/null
if [ $? -ne 0 ];
then
return 0
fi
VERSION=`unity --version | awk '{print $2}'`
DESKTOP="UNITY"
return 1
}
function detect_xfce()
{
ps -e | grep -E '^.* xfce4-session$' > /dev/null
if [ $? -ne 0 ];
then
return 0
fi
VERSION=`xfce4-session --version | grep xfce4-session | awk '{print $2}'`
DESKTOP="XFCE"
return 1
}
function detect_cinnamon()
{
ps -e | grep -E '^.* cinnamon$' > /dev/null
if [ $? -ne 0 ];
then
return 0
fi
VERSION=`cinnamon --version | awk '{print $2}'`
DESKTOP="CINNAMON"
return 1
}
function detect_mate()
{
ps -e | grep -E '^.* mate-panel$' > /dev/null
if [ $? -ne 0 ];
then
return 0
fi
VERSION=`mate-about --version | awk '{print $4}'`
DESKTOP="MATE"
return 1
}
function detect_lxde()
{
ps -e | grep -E '^.* lxsession$' > /dev/null
if [ $? -ne 0 ];
then
return 0
fi
# We can detect LXDE version only thru package manager
which apt-cache > /dev/null 2> /dev/null
if [ $? -ne 0 ];
then
which yum > /dev/null 2> /dev/null
if [ $? -ne 0 ];
then
VERSION='UNKNOWN'
else
# For Fedora
VERSION=`yum list lxde-common | grep lxde-common | awk '{print $2}' | awk -F '-' '{print $1}'`
fi
else
# For Lubuntu and Knoppix
VERSION=`apt-cache show lxde-common /| grep 'Version:' | awk '{print $2}' | awk -F '-' '{print $1}'`
fi
DESKTOP="LXDE"
return 1
}
function detect_sugar()
{
if [ "$DESKTOP_SESSION" == "sugar" ];
then
VERSION=`python -c "from jarabe import config; print config.version"`
DESKTOP="SUGAR"
else
return 0
fi
}
DESKTOP="UNKNOWN"
if detect_unity;
then
if detect_kde;
then
if detect_gnome;
then
if detect_xfce;
then
if detect_cinnamon;
then
if detect_mate;
then
if detect_lxde;
then
detect_sugar
fi
fi
fi
fi
fi
fi
fi
if [ "$1" == '-v' ];
then
echo $VERSION
else
if [ "$1" == '-n' ];
then
echo $DESKTOP
else
echo $DESKTOP $VERSION
fi
fi
Это работает как на Ubuntu 18.10 (, так и на космическом )[тип lxqt] и на Mint 19 (tara )[тип корицы] :
.$ set | grep XDG_CURRENT_DESKTOP | tr '[:upper:]' '[:lower:]' | cut -d'=' -f2
Захват результата в переменную и выполнение дальнейшего необходимого кода с помощью способной аналитической логики (case stmt, if/then ), который включает любые/все распознанные типы оттуда; и/или корректно функционировать, когда используются нераспознанные типы.
Стандарты сильно изменились с тех пор, как вопрос был задан в 2014 году.
Для 2021 я рекомендую :использовать только официальный $XDG_CURRENT_DESKTOP
.
Обратите внимание, что официально это двоеточие -разделенный список(подобно $PATH
), поэтому не думайте, что он содержит только одно значение, даже если оно есть в большинстве DE. Например, Unity Ubuntu установил его на Unity:Unity7:ubuntu
.
Если вы предпочитаете обрабатывать одно значение, используйте $XDG_SESSION_DESKTOP
.
Официальные стандарты:
XDG _ТЕКУЩИЙ _НАСТОЛЬНЫЙ ,определено в Спецификации входа на рабочий стол , начиная с ее версии 1.2
XDG _SESSION _DESKTOP , лучше всего описан вsystemd
PAM
Другие связанные переменные среды уже должны считаться устаревшими.
Функция bash для правильной проверки заданной строки в текущей среде рабочего стола:
# Encapsulates the mess that DE detection was, is, or will ever be...
# Without arguments, check if in a Desktop Environment at all
# Subshell is intentional so we don't have to save/restore IFS
# Case-insensitive comparison
is_desktop_environment() (
local de=${1:-}
local DEs=${XDG_CURRENT_DESKTOP:-}
# Shortcut: If de is empty, check if empty DEs
if [[ -z "$de" ]]; then if [[ "$DEs" ]]; then return; else return 1; fi; fi
# Lowercase both
de=${de,,}; DEs=${DEs,,}
# Check de against each DEs component
IFS=:; for DE in $DEs; do if [[ "$de" == "$DE" ]]; then return; fi; done
# Not found
return 1
)
Тестирование:
for de in "" Ubuntu Gnome KDE Unity; do
if is_desktop_environment "$de"; then
echo "Yes, this is ${de:-a DE}"
else
echo "No, this is not ${de:-a DE}"
fi
done
Yes, this is a DE
Yes, this is Ubuntu
No, this is not Gnome
No, this is not KDE
Yes, this is Unity