AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 35085
Accepted
James Sumners
James Sumners
Asked: 2009-07-03 07:08:43 +0800 CST2009-07-03 07:08:43 +0800 CST 2009-07-03 07:08:43 +0800 CST

使用屏幕时设置xterm(PuTTY)窗口标题?

  • 772

我正在尝试screen设置我的xterm标题。我在 之外有这个工作screen,但screen在我开始时保留任何标题。这是我的.bashrc:

函数 bash_prompt_command() {
    # $PWD 应该保留多少个字符
    本地 pwdmaxlen=25
    # 表示已经被dir截断
    本地 trunc_symbol=".."
    本地目录=${PWD##*/}
    pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen ))
    NEW_PWD=${PWD/#$HOME/\~}
    本地 pwdoffset=$((${#NEW_PWD} - pwdmaxlen ))
    如果 [ ${pwdoffset} -gt "0" ]
    然后
        NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
        NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
    菲

    导出 NEW_PWD
}

PROMPT_COMMAND=bash_prompt_command
# 颜色图表@http://wiki.archlinux.org/index.php/Color_Bash_Prompt
案例“${TERM}”在
    “xterm”)
        标题栏='\[\033]0;\u@\h > ${NEW_PWD}\007\]'
        PS1="${标题栏}\[\e[1;32m\][\e[0;36m\]\u\e[1;32m\]@\e[1;33m\]\h\e[ 1;32m\]] \e[0;37m\]\${NEW_PWD}/ \e[1;32m\]\$ \[\e[0m"
        ;;
    “屏幕”)
        标题栏='\[\033]0;\u@\h > ${NEW_PWD}\007\]'
        ESC='\[\ek\e\\\]'
        PS1="${标题栏}\[\e[1;32m\][\e[0;36m\]\u\e[1;32m\]] \e[0;37m\]\${NEW_PWD} / \e[1;32m\]\$ ${ESC}\[\e[0m"
        ;;
    *)
        PS1="\[\e[1;32m\][\e[0;36m\]\u\e[1;32m\]@\e[1;33m\]\h\e[1;32m\ ]] \e[0;37m\]\${NEW_PWD}/ \e[1;32m\]\$ \[\e[0m"
    ;;
经社理事会

这是我的.screenrc:

hardstatus alwayslastline
hardstatus 字符串 '%{= kg}[%{Y}%H%{g}][%= %{= kw}%?%-Lw%?%{=b kR}(%{W}%n-% t%?(%u)%?%{=b kR})%{= kw}%?%+Lw%?%?%= %{g}][%{Y}%l%{g}]% {g}[%{B}%m.%d.%Y %{G}%c%{g}]'

termcapinfo xterm|xterms|xs|rxvt ti@:te@
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

altscreen 开启
shelltitle '$ |bash'

我做错了什么?

更新(2010 年 8 月 19 日): 问题是当您设置alwayslastline. 所以我的解决方案是放弃并为我的屏幕会话选择一个预定的、有用的标题。.bashrc我的更新.screenrc可以在http://bitbucket.org/jsumners/rcfiles/src找到。

gnu-screen putty
  • 5 5 个回答
  • 17987 Views

5 个回答

  • Voted
  1. bwillan
    2012-02-20T09:19:04+08:002012-02-20T09:19:04+08:00

    实际上,有一种方法可以通过 screen 将转义序列直接发送到 xterm。它不容易找到,但从屏幕代码 (src/ansi.c) 来看,我认为它自 2005 年以来就已存在。我在 xterm、Gnome 终端和 putty 中使用它。我在 mintty source 中发现了一条注释,表明它在那里不起作用,仅仅是因为它们不处理 DCS(除非它最近已修复)。

    从下面的屏幕文档(在http://www.gnu.org/software/screen/manual/html_node/Control-Sequences.html)

    ESC P (A) Device Control String
              Outputs a string directly to the host terminal without interpretation.
    

    ANSI DCS(设备控制字符串)是一种转义码,用于直接发送到终端(我认为这是多年前它的最初目的)。这样的字符串以 ST 转义码(字符串终止符)终止。

    包装字符串以在 DCS..ST 块内设置终端的窗口标题,它会通过屏幕并正确更新,即使使用 hardstatus alwayslastline 也是如此。

    DCS = \033P,ST = \033\

    示例 - 要使用当前工作目录更新窗口标题,请使用

    NEW_TITLE="\033]0;${PWD/$HOME/~}\007"
    echo -ne "\033P${NEW_TITLE}\033\\"
    

    迟到总比不到好!希望这可以帮助某人。

    以防我对屏幕源更改有误:我正在运行来自屏幕会话 git 的最新版本,而后者又使用来自屏幕 git 的几乎最新版本(有一些特定于屏幕会话的更改)。但是日志消息的日期来自 2005 屏幕(如果您克隆屏幕 git repo 并使用下面的命令,您可以看到对该提交所做的关于 DCS 处理的更改)。

    git clone git://git.savannah.gnu.org/screen.git
    git difftool e6618a14^! src/ansi.c
    
    • 7
  2. Best Answer
    crb
    2009-07-03T13:17:56+08:002009-07-03T13:17:56+08:00

    转义码在屏幕内是不同的。

    这在屏幕之外:

    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
    

    相当于这个内屏:

    PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME}: ${PWD}\033\\"'
    

    将您的案例 ${TERM}="screen" 标题栏更改为

    TITLEBAR='\[\033_\u@\h > ${NEW_PWD}\033\\\]'
    

    将解决您的问题。

    • 4
  3. 0x89
    2009-12-22T06:01:55+08:002009-12-22T06:01:55+08:00

    crb 是对的,但是

    a) 他使用的转义码对我不起作用。它应该\033k代替\033_. 见下。screen (1)_ "TITLES (naming windows)"所以应该是:

    PROMPT_COMMAND='echo -ne "\033k${USER}@${HOSTNAME}: ${PWD}\033\\"'
    

    b) 这种转义只用于设置屏幕窗口的标题。一个屏幕实例可以有多个窗口,每个窗口都有一个名称,即在转义序列中显示hardstatus的内容。captiont

    c)如果您在以下位置为 xterm 设置了正确的 terminfo,则正常的 bash 转义有效.screenrc:

    termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
    

    (这也works on my machine适用于腻子)

    因此,为了为屏幕窗口和 putty/xterm 标题设置正确的标题,我使用类似:

    XTERM_TITLE="${USER}@${HOSTNAME}: ${PWD}"
    SCREEN_TITLE="${PWD}"
    PROMPT_COMMAND='echo -ne "\033]0;$XTERM_TITLE\007\033k$SCREEN_TITLE\033\\"'
    

    供参考: http ://tldp.org/HOWTO/Bash-Prompt-HOWTO/x395.html

    • 1
  4. Grwlf
    2015-04-05T02:59:39+08:002015-04-05T02:59:39+08:00

    我不会完全回答这个问题,但让我提出解决问题的方法。许多窗口管理器支持EWMH规范。还有一个命令行工具wmctrl可以与它们交互。使用此工具,可以使用以下命令轻松更改活动窗口的标题:

      wmctrl -r :ACTIVE: -T "FooTitle"
    

    也可以更改窗口图标、布局和其他属性。该工具可能不适用于 PuTTY,因为 Windows 不支持 EWMH,但大多数 Linux 系统应该接受它。

    使用这种方法,您是否使用都没有关系screen。

    • 1
  5. Jacek Domagała
    2015-06-26T03:30:59+08:002015-06-26T03:30:59+08:00

    过去两周,我搜索了很多论坛,但没有找到问题的答案:

    如何将所有命令输出到 Putty 标题?

    其他程序需要它来了解服务器上的某些作业何时完成以及它是对还是错。Plink stdout 和 stdin 不起作用,我使用了许多带有等待延迟的调整,以及一些对其他人不起作用的命令。XSEL 和 XCLIP 无法安装在该服务器上。

    所以这里是解决方案:

    1. 在文件中获取命令输出。
    2. 回显该文件以显示标题。

    在 putty 客户端和 suse 服务器上,它看起来像这样:

    ls /home | grep domagaja > logutoit.txt 
    echo -e "\033]0\\;$(cat logutoit.txt)\\007\\c"
    

    希望有人能够使用它。当然,它不适用于所有服务器类型和 putty 客户端设置,但这个想法应该很好用。

    • 0

相关问题

  • 如何从 jailshell 启动 GNU 屏幕(无 pty)[关闭]

  • 将 GNU Screen 的监控功能指向 hardstatusline

  • 具有不同布局的多个屏幕会话:可能吗?

  • 什么是有用的 .screenrc 设置?

  • GNU 屏幕和 .bashrc

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve