我已经用 Ubuntu 12.04 和 Debian 7 对此进行了测试。当我这样做时
echo $TERM
Run Code Online (Sandbox Code Playgroud)
我得到
xterm
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用下拉菜单“帮助”>“关于”,那么它会显示gnome terminal 3.4.1.1.
这是否意味着我只使用 gnome-terminal?还是只是xterm?还是 gnome-terminal 是 xterm 的扩展?我糊涂了。
阅读CVE-2009-4487 的细节(这是关于日志文件中转义序列的危险)我有点惊讶。
nginx 0.7.64 将数据写入日志文件而不清理不可打印的字符,这可能允许远程攻击者通过包含终端模拟器转义序列的 HTTP 请求修改窗口的标题,或可能执行任意命令或覆盖文件。
显然,这实际上并不是 nginx 中的安全漏洞,而是终端模拟器中的安全漏洞。
当然,也许cat将日志文件写入终端只是偶然发生的,但是将日志文件写入grep是很常见的。less也许清理转义序列,但谁知道什么 shell 命令不会改变转义序列......
我倾向于同意Varnish 的回应:
终端响应转义的智慧通常定期受到质疑,但仍然没有一个主要的终端仿真程序认为适合丢弃这些序列,这可能是在与不再使用的 1970 年代技术兼容的误导尝试中。[..] 从安全的角度来看,让终端仿真程序停止做愚蠢的事情,从而解决这个和其他安全问题,而不是责怪任何和所有写入日志文件的程序,这将更有效率和所有人。
因此我的问题:
我如何保护我的 xterm,以便不再可能通过转义序列执行命令或覆盖文件?
X 的哪些终端模拟器可以抵御这种攻击?
security terminal-emulator xterm special-characters escape-characters
我的 Bash Prompt 当前正在使用以下顺序设置 xterm 标题栏:
PS1='\033]0;\u@\h>\w\007'
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以在标题栏中显示当前命令。例如,如果我使用 拖尾文件tail -f foo.log,我希望我的标题栏显示tail -f foo.log.
我在 GNU 屏幕上有一个小问题。GNU 屏幕会话在我的 RaspberryPi 上运行。现在有时,当我加入它时,如果我在终端中单击(我在 Fedora 上使用终结器),我会看到奇怪的字符。这些字符取决于我鼠标的坐标……似乎是对发送到 GNU Screen 的点击事件的错误解码。这些字符包括诸如
kM#kM - Z3#Z3 - q-#q-
Run Code Online (Sandbox Code Playgroud)
等等…
我首先认为这是我的问题,tty所以我去在我的 RaspberryPi 上打开了一个新的 GNU Screen 会话:完全没问题。
我stty -a在两个会议上都做了一个,发现有区别。然后我stty -g > ~/stty-good-settings在好的会话上做了一个 并将它加载到坏的会话上stty `cat ~/stty-good-settings`(我比较了之后的值,成功加载了设置)但是我在一个屏幕会话中仍然有问题,而不是另一个!
我不确定发生了什么,如果这是由于我的TERM价值(两者相同)、我的tty设置、我的终端......
我需要我的$TERM是xterm-256colorTMUX以外(在“普通”与zsh的终端),但screen-256color里面TMUX。
首先我试过:
export TERM='xterm-256color'到我的~/.zshrc.set -g default-terminal "screen-256color"到我的~/.tmux.conf现在,当我打开终端(比如 xterm)时,TERM是xterm-256color,这是正确的。但是当我运行 tmux 时,又TERM是xterm-256color!
然后我尝试在我的~/.zshrc. 现在,当我打开终端时,TERM是xterm,而当我运行 tmux 时,TERM是screen-256color。如此看来,如果我设置TERM的.zshrc,首先TMUX套TERM到screen-256color,运行外壳(这是zsh的),和zsh的读取.zshrc和复位TERM来xterm-256color。
那么,如何让TERM要xterm-256color在“普通”终端,并screen-256color在TMUX?
在不同的 Unix/Linux 系统下,我观察到 X 终端应用程序(例如 xterm)中的不同双击行为。
有时双击会左右选择所有内容,直到下一个非字母字符(例如,它选择光标下的单词)。
有时直到下一个空白/eol 之前的所有内容都被选中(例如,光标下的完整路径被选中)。
我如何配置双击行为 - 比如 - 在 xterm 中(因为它在大多数系统上可用)?
目前,我发现对于大多数用例来说,第二种模式更方便。
在适当的桌面环境中愉快地使用不同的终端模拟器(如Konsole、Gnome-TERMINAL和最近的XFCE Terminal)几年后,我决定使用旧的xterm及其位图字体。它工作得很好,它支持 Unicode,并且默认的固定字体系列包含几乎所有语言的字符,这很棒。
但是我遇到了一个重要的问题。字体真的很小。即使是所谓的大尺寸(即 10x20 位图字体)对我来说也非常小,无法使用。
我对 XFCE 环境的默认设置设置为 120 dpi,但xpdyinfo报告 97x97 DPI
$ xdpyinfo |grep resolution
resolution: 97x97 dots per inch
Run Code Online (Sandbox Code Playgroud)
所以我试图用 改变 DPI xrandr,但它没有帮助。
$ xrandr --dpi 120
Run Code Online (Sandbox Code Playgroud)
结果似乎被应用
$ xdpyinfo | grep resolution
resolution: 120x120 dots per inch
Run Code Online (Sandbox Code Playgroud)
但它根本不会改变分辨率xterm。我什至尝试使用缩放,但它影响了整个 X,而不是单个应用程序:
$ xrandr --output LVDS1 --scale 0.5x0.5
Run Code Online (Sandbox Code Playgroud)
有Qt的和GTK的解决方法,但对于Xlib基于应用程序一样Xterm,Xcalc,Xman,Xfige …
我试图用来xmodmap映射META_L到MENU键,但它似乎不被接受bash为元键。所以,我想知道这些组件(键盘、X、xterm、bash)如何与元键和超级键相关。任何解释将不胜感激。
让我换一种说法。例如,bash 手册页说,函数 yank-nth-arg 绑定到M-C-y并且当我按 时它可以工作Esc-Control-y。但是我觉得这有点麻烦。那么如何让 bash 接受另一个键作为Meta(如Menu)作为其所有默认绑定?
如果我xterm使用它的默认位图字体启动,然后从“VT 字体”菜单中选择“大”字体(通过ctrl+right mouse),我会得到一个非常有用的位图字体,并且显然对日语字符支持很好。
我想知道这种字体是什么,以便我可以在其他地方使用它。不幸的是,我没有找到关于 XTerm 使用什么默认设置的信息(即当没有明确指定时)。许多站点都展示了如何使用 X 资源来指定新设置(例如特定字体),但我所见过的站点都没有说明如果我什么都不做就使用什么默认值。
我试过观察字体,它看起来与 相似且宽度相同9x15,但它使用了更多的垂直空间。但是,它似乎没有9x15不同的行距,因为直接指定此字体无法显示“大”可以处理的一些日语字符。
虽然我很高兴知道这种特定字体是什么,但我真的很想知道在哪里可以找到XTerm 对其资源使用的默认值。如果有什么不同,我正在运行 64 位 Ubuntu 12.04 LTS。
[我已经看到关于这个主题的这个问题,这就是为什么我特别询问默认值而不是试图从正在运行的 XTerm 中获取实时值。]
我在 VirtualBox 实例中运行了最小的 Debian 安装,手动安装了 X11 和 Awesome 窗口管理器(还没有任何自定义配置)并安装了 VirtualBox 附加功能(并在设置中启用了共享剪贴板)。但是,从 xterm 终端复制粘贴文本似乎仍然不起作用:CTRL+C作为信号发送到终端,Shift+Insert插入我选择的文本(这可能意味着它以某种方式被复制到某个缓冲区),但它仍然无法从主机操作系统中使用。
xterm ×10
x11 ×3
bash ×2
fonts ×2
clipboard ×1
defaults ×1
gnu-screen ×1
mouse ×1
prompt ×1
security ×1
terminal ×1
tmux ×1
tty ×1
virtualbox ×1
window-title ×1
x-resources ×1
xfig ×1
zsh ×1