3

C プログラミング言語 (GNU/Linux) でターミナル エミュレーター (« aterm »、« xterm »、« konsole » など) の名前を取得する方法を探しています。いくつかの調査を行いましたが、何も見つかりませんでした。

4

5 に答える 5

4

これを確認する信頼できる方法があるとは思えません。

@larsmans が提案したように、TERMenv 変数を確認できますが、ほとんどのエミュレーターは同じ端末設定を使用します。

親プロセス ID ( getppid) とその親 ( linux: 別のプロセスの親 pid をプログラムで取得しますか? ) などを、ターミナル エミュレーターのような名前のプロセスが見つかるまでチェックします...

または、pstree単にその出力を処理した場合:

# pstree -As 12652
init---screen---bash---pstree

(申し訳ありませんが、私は X 端末を持っていないため、適切な例を示すことができません)

とにかく、これらのどれも完全に信頼できるものではありませんが、おそらくうまくいくでしょう。

于 2012-05-09T16:22:56.460 に答える
4

端末の名前はTERM環境変数によって与えられます。

char *termtype = getenv("TERM");
printf("The terminal type is %s\n", termtype);
于 2012-05-09T16:25:25.777 に答える
1

これが機能するかどうかを確認してください。Emacs、urxvt、xterm、rxvt でテストしました。

#!/bin/zsh

terminal_emulator_parents=`pstree -As $$`
tep_list=`echo $terminal_emulator_parents | tr -s "-" | tr "-" " " \
          | tac -s' ' | tr '\n' ' '`

found="false"
for process in `echo $tep_list`; do
    if [[ $process =~ ("urxvt"|"xterm"|"rxvt") ]]; then # here: add all
        found="true"                                    # terminal emulators
        break                                           # you can think of
    fi
done

if [[ $found == "true" ]]; then
    echo "Terminal emulator: $process"
else
    echo "Couldn't determine the terminal emulator."
fi
于 2013-03-09T10:17:04.593 に答える
0

前の 2 つの回答をpstreeで構築し、環境変数を作成して .bashrc でターミナル エミュレータの種類を識別し、スクリプトでその情報にアクセスできるようにしました。

これを使用して、postactivate を使用して guake タブのタイトルを現在の仮想環境に設定し、postdeactivate でそれをクリアしますが、別の端末プログラムを使用しているときにたまたま仮想環境に入った場合に guake が呼び出されないようにします。

これが私のコードです:

.bashrcで

export TERM_TYPE=`pstree -As $$ | awk -F "---" '{print $2}'`

postdeactivate または postactivate で (「Terminal」を目的のタブ名に置き換えます)

#!/bin/bash
# This hook is run after every virtualenv is deactivated.

if [ "$TERM_TYPE" == "guake" ]; then
  guake -r Terminal
fi
于 2014-06-05T21:02:45.390 に答える
0

関数があります: ctermid() と gettyname()

ctermid は、指定された文字列で名前を返します

getttyname は、選択したファイル デバイスで動作します

于 2015-12-05T18:20:00.507 に答える