我想解决 tmux 无法通过以下方式报告用户名的问题logname
:
logname: no login name
我正在使用以下步骤:
# lets assume all other prerequisites are compiled already
# and staged/installed to $HOME/opt
# libutempter (http://freecode.com/projects/libutempter)
# URL : ftp://ftp.altlinux.org/pub/people/ldv/utempter/libutempter-1.1.5.tar.bz2
tar xvfj libutempter-1.1.5.tar.bz2
cd libutempter-1.1.5
vi Makefile
grep 'DESTDIR =' Makefile
---
DESTDIR = /home/xxxxxx/opt
make
make install
# tmux (http://tmux.sourceforge.net/)
# URL : git://git.code.sf.net/p/tmux/tmux-code
git clone git://git.code.sf.net/p/tmux/tmux-code tmux
cd tmux
sh autogen.sh
CFLAGS="-I$HOME/opt/include -I$HOME/opt/usr/include -I$HOME/opt/include/ncurses" \
CPPFLAGS="-I$HOME/opt/include -I$HOME/opt/usr/include -I$HOME/opt/include/ncurses" \
LDFLAGS="-L$HOME/opt/lib -L$HOME/opt/include/ncurses -L$HOME/opt/include -L$HOME/opt/usr/lib" \
./configure --enable-static
CPPFLAGS="-I$HOME/opt/include -I$HOME/opt/usr/include -I$HOME/opt/include/ncurses" \
LDFLAGS="-static -L$HOME/opt/include -L$HOME/opt/usr/include -L$HOME/opt/include/ncurses -L$HOME/opt/lib -L$HOME/opt/usr/lib" \
make
但 tmux 仍然无法通过 报告登录名logname
。
我无法安装软件包(没有 root 访问权限)。
我更新了环境变量和标志,ldd 报告没有共享库,但 tmux 仍然无法通过日志名显示登录名。
答案1
这是 的预期目的libutempter
,但它也需要一定程度的应用程序支持,这tmux
有直到最近(2014 年 2 月)进入了掌握分支(您正在使用),但可能尚未准备好使用。
来自当前 1.9a 源代码分发中的常见问题解答:
* How is tmux different from GNU screen?
[...]
- screen has support for updating utmp. Nobody has really come up with a clean,
portable way to do this without making tmux setuid or setgid yet.
主分支在线常见问题解答CHANGES
尽管该文件尚未更新 ,但完全忽略了这一点。
运行后检查定义HAVE_UTEMPTER
(Makefile
不是预期的!) ,如果没有定义,那么您需要阅读以确定构建环境有什么问题。config.h
configure
config.log
我目前最好的猜测是:
- 你没有
libutempter.a
, onlylibutempter.so
,所以使用-static
会导致 libutempter 检测失败,因为它无法链接 - 它被检测到并编译进去,但是
utempter
助手(更新的特权任务utmp
被委托给它)不是setgid(通常是setgid utmp) - 有些系统是已知限制访问到那个帮手防止愚蠢,因此调用二进制文件(即
tmux
)必须还被setgid(通常是setgid utempter)
如果你libutempter
自己构建它应该使两个都静态和动态版本,但我怀疑分发包将只包含动态版本。
如果您没有 root 访问权限,您不能正确安装您自己的 libutempter:它无法维护系统utmp
/wtmp
文件。如果系统安装的 libutempter 仅缺少libutempter.a
,那么您应该能够编译自己的 libutempterlibutempter.a
以便tmux
静态配置/链接,并使用已安装的系统 setgid 帮助程序(通常/usr/lib/utempter/utempter
为 或/usr/libexec/utempter/utempter
)。如果对该二进制文件的访问也受到限制,即tmux
需要 setgid 才能运行它,则无法解决该问题。
tmux
目前,新 libutempter 功能的错误处理尚不完整,如果您可以使用-DUTEMPTER_DEBUG
它重建 libutempter,如果上述情况均未完成,可能会有所帮助:
make CFLAGS=-DUTEMPTER_DEBUG