Я выяснил, какой libc моя система использовала. В моем случае это было eglibc
это, перекрестная компиляция с openembedded для Ангстрема 2012.05, является выбором по умолчанию. Перекрестная компиляция для eglibc
решает этот вопрос.
Я записал эту следующую часть только для ссылки, потому что я спросил bitbake список рассылки, и я не сделал нашел что-либо об этом на Google: пересечь компиляцию для uclibc
набор ANGSTROMLIBC = "uclibc" в conf файле (как указано на этих часто задаваемых вопросах). uclibc
не должен быть скомпилирован непосредственно, но это будет создано при выполнении bitbake рецепта на источнике, и упакованный под/tmp/deploy/подкаталогами, обычно в том же каталоге пакета.
Таким образом, после некоторой работы отладки мне наконец удалось прослеживать проблему до пользовательского обнаружения pinky
. По некоторой нечетной причине pinky -fw
не перечислит пользовательский дисплей при нормальных обстоятельствах. Только после запуска корневой сессии это может обнаружить требуемый дисплей:
# DEBUG OUTPUT WITHOUT ROOT SESSION
##################
displaynum: 0 # correct
##################
pinkyfw: bob tty7 04:09 Aug 18 17:59
pinky: Login Name TTY Idle When Where
bob Bob tty7 04:09 Aug 18 17:59 # notice the missing
################## # information on display used
pinkytest: bob # testing a workaround
user: # empty because awk didin't find a match for ":0" in pinky -fw
##################
# DEBUG OUTPUT WITH ROOT SESSION
##################
displaynum: 0 # correct
##################
pinkyfw: bob tty7 04:04 Aug 18 17:59
bob pts/3 Aug 18 21:59 :0
pinky: Login Name TTY Idle When Where
bob Bob tty7 04:04 Aug 18 17:59
bob Bob pts/3 Aug 18 21:59 :0 # after starting a root session
##################
pinkytest: bob
user: bob # awk found a match for ":0"
##################
# DEBUG OUTPUT WITHOUT ROOT SESSION, WORKAROUND APPLIED
##################
displaynum: 0 # correct
##################
pinkyfw: bob tty7 04:09 Aug 18 17:59
pinky: Login Name TTY Idle When Where
bob Bob tty7 04:09 Aug 18 17:59
##################
pinkytest: bob
user: bob
##################
Это - обходное решение, которое я применил:
getXuser() {
user=`pinky -fw | awk '{ if ($2 == ":'$displaynum'" || $(NF) == ":'$displaynum'" ) { print $1; exit; } }'`
if [ x"$user" = x"" ]; then
startx=`pgrep -n startx`
if [ x"$startx" != x"" ]; then
user=`ps -o user --no-headers $startx`
fi
fi
if [ x"$user" = x"" ]; then # lines added
user=$(pinky -fw | awk '{ print $1; exit; }') # lines added
fi # lines added
if [ x"$user" != x"" ]; then
userhome=`getent passwd $user | cut -d: -f6`
export XAUTHORITY=$userhome/.Xauthority
else
export XAUTHORITY=""
fi
export XUSER=$user
}
К сожалению, я не делаю теперь достаточно о pinky
и управление пользователями в соответствии с Linux, чтобы смочь сказать, могло ли это обходное решение создать еще больше проблем. Я предполагаю, что это лучше, чем просто жесткое кодирование имя пользователя и дисплей в файл (который даже не работал, когда я попробовал).