[問題] 如何判斷是否正在tty下使用screen/tmux
我通常是用"tty"這個指令判斷是否正在tty下
例如
1. 在tty(1~6)時(假設在tty1)
user@local_host:~$ tty
/dev/tty/1 => tty
2. 在x11中使用gnome-termial時
user@local_host:~$ tty
/dev/pts/7 => pts
3. 用putty遠端到遠端Linux伺服器時
user@remote_host:~$ tty
/dev/pts/10 => pts
4. 在gnome-terminal中使用screen/tmux時
user@local_host:~$ tty
/dev/pts/8 => pts
不過
5. 在tty(1~6)中使用screen/tmux時
user@local_host:~$ tty
/dev/pts/8 => 恩...好希望它顯示的是tty = =
我希望在情況5.中, 能判斷出"我正在tty使用screen/tmux"
然而此時"tty"這個指令似乎就沒用了
請問有甚麼其他判斷方法嗎
(除了印出$TERM之外
因為不論是在x或tty中attach screen, $TERM的內容都是一樣的
還有我不希望手動調整$TERM的內容)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.31.149
→
09/21 00:22, , 1F
09/21 00:22, 1F
這變數會印出screen window的index
似乎無法用來判斷是否在tty中使用screen
(因為在x-term中使用screen印$WINDOW, 其值跟在tty中用screen印出來一樣)
推
09/21 09:01, , 2F
09/21 09:01, 2F
→
09/21 09:02, , 3F
09/21 09:02, 3F
No, 因為在tty建立的screen/tmux session後detach之,
然後從x-term attach該session, TMUXTTY的值還是/dev/tty/i
→
09/21 16:22, , 4F
09/21 16:22, 4F
→
09/21 16:23, , 5F
09/21 16:23, 5F
→
09/21 16:25, , 6F
09/21 16:25, 6F
我看了好幾次你的推文 但還是看不太懂 十分抱歉= =
我把我的情境講出來好了 看有沒有回答到你的推文
(有點長 很多部分跟本文問的問題也許沒甚麼關係)
我平常習慣把鍵盤左邊的Ctrl跟Caps Lock對調
不是真的硬體上對調 而是使用軟體的方式對調
在X11(graphical mode)跟在tty(console mode)下 Ctrl跟Caps Lock對調的方式不相同
X11下要對調Ctrl跟Caps Lock可以這樣做
法一:
step 1.先準備兩個script: caps_lock_as_ctrl.sh 跟 .xmodmap
caps_lock_as_ctrl.sh的內容:
xmodmap ~/.xmodmap 2>/dev/null
.xmodmap的內容:
!
!! Caps Lock as Ctrl
!!
remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L
step 2. 在啟動X時執行step 1.的caps_lock_as_ctrl.sh
以Xubuntu來說是這樣:
設定值 > 設定值管理員 > 工作階段與起始 >
應用程式自動啟動 > 加入 > 名稱(隨便);
> 指令 = bash -c "/home/user/path_to/caps_lock_as_ctrl.sh"
或新增檔案: "~/.config/autostart/caps_lock_as_ctrl.desktop", 內容如下:
[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=caps_lock_as_ctrl
Comment=
Exec=bash -c "/home/user/path_to/caps_lock_as_ctrl.sh"
StartupNotify=false
Terminal=false
Hidden=false
法二:
設定值 > 設定值管理員 > 工作階段與起始 > 應用程式自動啟動 > 加入
> 名稱(隨便); 指令 = setxkbmap -option "ctrl:nocaps"
可以發現對X11來說 不管是法一或法二 執行時都不需要root權限
然而在tty下就不是這樣了 tty下對調Ctrl跟Caps Lock的做法:
在 ~/.bashrc 中加入這個function跟alias
swap_ctrl_and_capslock() {
if [ 在 tty 中 ]
then
bash -c 'echo -e "$(dumpkeys | grep ^keymaps)\nkeycode 58 = Control\nkeycode 29 = Caps_Lock" | sudo loadkeys'
else # 在 X11 中
touch ~/.bashrc # no operation
fi
}; alias ccc='swap_ctrl_and_capslock'
loadkeys指令需要sudo權限才能執行 我又覺得打密碼很麻煩
於是寫成一個function 想交換ctrl跟caps lock時才執行(我並非每次進tty都會交換ctrl跟caps lock)
問題出在黃色if的部分 我本來是寫:
if tty | grep tty > /dev/null
但在tty中建立或attach screen/tmux其值為假 就不會交換ctrl跟caps lock了= =
所以才問了本文的問題
想知道有甚麼方法能準確區分到底是在tty中/在tty中用screen(tmux)/在X11/在X11用screen(tmux)
至於b大你問的...我看不懂所謂的"被控制程式"是甚麼(除了shell還有可能是甚麼呀?)
不過就我的情況來說一定是在interactive shell執行此function啦...
不知道有沒有回答到你的問題...
※ 編輯: Holocaust123 來自: 140.112.31.155 (09/21 20:06)
推
09/21 22:33, , 7F
09/21 22:33, 7F
→
09/21 22:34, , 8F
09/21 22:34, 8F
→
09/21 22:35, , 9F
09/21 22:35, 9F
→
09/21 22:36, , 10F
09/21 22:36, 10F
→
09/21 22:37, , 11F
09/21 22:37, 11F
→
09/21 22:37, , 12F
09/21 22:37, 12F
→
09/21 22:38, , 13F
09/21 22:38, 13F
→
09/21 22:38, , 14F
09/21 22:38, 14F
→
09/21 22:39, , 15F
09/21 22:39, 15F
→
09/21 22:39, , 16F
09/21 22:39, 16F
推
09/21 23:00, , 17F
09/21 23:00, 17F
推
09/22 00:26, , 18F
09/22 00:26, 18F
→
09/22 00:26, , 19F
09/22 00:26, 19F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):