Действительно ли возможно получить текущее название xterm окна?

Я имел ту же проблему и заметил, что настоящая проблема состоит в том, что учет/сессия перестал работать, потому что у пользователя RADIUS нет записи в /etc/passwd. Я решил проблему при помощи pam_script выполниться adduser прежде, чем ввести gdm сессию.

9
07.01.2012, 05:09
4 ответа

Использовать xtitle сценарий.

Существует много вариантов в Интернете, однако, я склонен использовать тот, который зависит от xprop

http://www.shelldorado.com/scripts/cmds/xtitle

4
27.01.2020, 20:06
  • 1
    Превосходный! Это ТОЧНО, на что я надеялся..., и это не только работает на xterm, но и (в отличие от других решений) также работает на терминал гнома.Спасибо! –  TheGeeko61 07.01.2012, 21:02
  • 2
    Действительно отметьте, хотя то получение заголовка с помощью X-протокола, который является что xtitle делает, только работы для локальных сессий. –  ak2 07.01.2012, 22:07

Существует управляющая последовательность для запросов текущего заголовка, но это обычно отключается из соображений безопасности. Поэтому это позволяет вредоносной программе или даже просто catted текстовому файлу вставлять последовательности произвольного символа, как будто введенный на клавиатуре, первой установкой заголовка и затем просьбой иметь его сообщил. Следовательно стопка заголовка была представлена вместо этого.

Следующая команда сохранит текущее окно и заголовки значка на стек:

echo -ne '\e[22t'

Это установит заголовок на my title:

echo -ne '\e]0;my title\007'

И это восстановит предшествующее окно и заголовки значка:

echo -ne '\e[23t'
9
27.01.2020, 20:06

Если я понимаю Ваше право вопроса, необходимо смочь получить текущий xterm заголовок путем осмотра $PROMPT_COMMAND переменная, например:

$ echo $PROMPT_COMMAND 
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

и можно установить его как (разрыв строки для удобочитаемости):

PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]\
0;%s@%s%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
-1
27.01.2020, 20:06
  • 1
    PROMPT_COMMAND самый авторитетный путь не состоит в том, чтобы получить заголовок, так как он не всегда устанавливается, и любая команда, которую Вы выполняете, могла изменить заголовок между подсказками. Для большей части точности эмулятор терминала определенные управляющие последовательности являются, вероятно, способом пойти. –  jw013 07.01.2012, 19:39
  • 2
    Это не работало бы на случаи, где другие приложения устанавливают заголовок. –  TheGeeko61 07.01.2012, 20:55

Для тривиального (и, вероятно, наиболее распространенного случая), когда можно запросить подсказку для текущего xterm, просто используйте xprop -id $ WINDOWID WM_NAME . Если вы хотите извлечь значение для манипуляций в сценарии оболочки, вы можете сделать что-нибудь более дорогостоящее, например:

   curtitle=`xprop -id $WINDOWID WM_NAME|awk '{print $3}'|xargs echo`

Используя только bash (чтобы избежать вызова awk и xargs):

   curtitle=`xprop -id $WINDOWID WM_NAME`
   curtitle=`eval echo ${x##*=}`

xargs выводит эхо в в первом примере и eval во втором примере просто убирают кавычки, которые xprop помещает вокруг значения.

Замените WM_NAME на WM_ICON, если вы хотите получить имя значка, а не строку в строке заголовка.

2
27.01.2020, 20:06

Теги

Похожие вопросы