Программа, названная xmodmap, может использоваться для изменения контурных карт. Посмотрите man xmodmap
если это уже установлено.
Короче говоря используйте xev
видеть детали приблизительно X событий. Разожгите это и ударьте Ваш / ключ. На моей установке это - результат, который я получаю:
KeyRelease event, serial 34, synthetic NO, window 0x4e00001,
root 0x15a, subw 0x0, time 107752919, (784,828), root:(789,850),
state 0x10, keycode 61 (keysym 0x2f, slash), same_screen YES,
XLookupString gives 1 bytes: (2f) "/"
XFilterEvent returns: False
Затем на удаленной машине использовать xmodmap -e 'keycode [KEYCODE] = [KEYSYM]
создать отображение, где [КОД КЛАВИШИ] и [KEYSYM] значения, полученные от xev. Попытайтесь установить значение по умолчанию 61,0x2f сначала, чтобы видеть, должно ли оно просто быть сброшено. (т.е. xmodmap -e 'keycode 61 = 0x2f'
)
Если это - остановка, попытайтесь отобразить другой ключ. Например, я попробовал код клавиши 105 (правильное управление) к 0x2f. Это работало локально и на ssh сессии для меня.
Править:
Можно также хотеть установить вопросительный знак. Расширьте предыдущую команду до xmodmap -e 'keycode 61 = 0x2f 0x3f
'. Вы видите полный список keysyms здесь.
Как правило, $STY
будет установлен.
Так:
if [ -n "$STY" ]; then
echo "I'm most likely running under screen"
fi
$STY
обычно, что необходимо говорить с Вашим screen
. Это используется для построения пути сокета домена Unix, используемого для управления screen
(что-то как /var/run/screen/S-$USER/$STY
.
Теперь, это не будет работать, например, если с того экрана, Вас ssh
к другой машине. Оболочка, запущенная там, не будет иметь $STY
в его среде, и это не имело бы применения для него так или иначе, так как это не сможет получить доступ к сокетам домена Unix на Вашей машине.
Однако возможно запросить терминал с escape-последовательностью для определения ее типа:
if [ -t 1 ] && [ -t 0 ]; then
s=$(stty -g)
stty -icanon -echo min 0 time 3
printf '\033[>c'
type=$(dd count=1 2> /dev/null)
stty "$s"
case $type in
(*'>83;'*) echo "this is screen"
esac
fi
Другой подход, как предложено @val0x00ff должен проверить значение $TERM
переменная среды. То значение предназначено для сообщения приложений, с каким терминалом они говорят. Это установлено screen
к чему-то, что запускается с screen
(как screen
может реализовать различные варианты терминалов). $TERM
передается через rlogin
, rsh
, telnet
, ssh
. Это, как как гарантируют, не будет работать вышеупомянутым, но более просто и менее навязчиво.
case $TERM in
(screen*) echo "I'm more than likely running in screen"
esac
Как для предыдущего решения, можно работать в screen
, но Вы не можете давать команды к нему с screen -X
например. Однако обратите внимание на то, что можно передать команды с помощью escape-последовательностей (хотя это не включено по умолчанию из соображений безопасности).
При выполнении на экране Вашего $TERM
переменная среды изменяется на экран. Можно зарегистрироваться в сценарии, например,
if [[ "$TERM" == screen* ]]; then
echo "Running in screen"
else
echo "Outside screen"
fi
Это было бы одним из подходов. echo $TERM
вне экрана и снова echo $TERM
в экране и посмотрите различие
Я использую tmux сам и это немного для списка сессий, только если я уже не нахожусь на tmux сессии
if [ -z "$TMUX" ]; then
alias tmuxa='tmux attach -d -t'
alias tmuxc='tmux new-session -s'
echo "You're not in a tmux session, create a new one with tmuxc, or attach to one of the ones below with tmuxa"
tmux ls
fi