Baru-baru ini saya menaruh di xset b off
.bashrc saya. Sekarang saya terganggu oleh kesalahan yang muncul ketika saya masuk melalui tty atau melalui ssh, yaitu di luar sesi X.
Hal pertama yang terlintas di pikiran saya adalah [[ -z "$SOME_VAR" ]] && xset b off
(well, ternyata variabel pengujian yang diset vs kosong adalah pertanyaan yang berbeda). Tetapi SOME_VAR mana yang benar?
Jadi saya membedakan set
keluaran tty dan keluaran urxvt set
untuk melihat variabel mana yang diatur dalam X dan hilang dalam tty. Seperti yang diharapkan, ada banyak perbedaan (daftar hanya yang tampaknya relevan bagi saya):
DESKTOP_SESSION
DISPLAY
GDMSESSION
SESSION_MANAGER
WINDOWID
WINDOWPATH
XAUTHORITY
XDG_SESSION_COOKIE
XDG_CONFIG_DIRS
XDG_DATA_DIRS
XDG_MENU_PREFIX
Yang mana yang paling benar dan universal untuk diuji untuk mendeteksi apakah saya dalam sesi X atau tidak? Sesuatu yang akan bekerja di banyak distro dan platform serta lingkungan desktop sebanyak mungkin?
Atau adakah cara yang lebih baik daripada menguji variabel lingkungan?
sumber
ssh -X
; bekerja dengan baik!Saya pikir memeriksa
DISPLAY
akan menjadi pendekatan terbaik.sumber
DISPLAY
, atau hanya menekan pesan kesalahan secara umum. Berikan/dev/null
cinta dari waktu ke waktu.ssh
s sederhana sampai sekarang, ketika saya mulai melakukanssh -X
--- untuk dapat menggunakan Vim lebih dari ssh sehingga konten yang dipilih oleh mode visual sampai ke clipboard X lokal, dimana Anda tidak perlu xserver di sisi server. Jadi DISPLAY akan disetel sebagai efek dari hanya memungkinkan penerusan, bahkan jika xserver dan xset tidak ada.if [[ $DISPLAY ]]; then … fi
DISPLAY
Variabel Anda dapat mengarah ke tampilan yang sebenarnya tidak memiliki server X yang berjalan (misalnya ketika hardcode dalam skrip, atau server X dimatikan setelah variabel diatur).Saya biasanya menggunakan
TERM
variabel untuk menguji X dalam skrip saya.TERM
biasanya diatur kelinux
pada TTY danxterm
X.Saya menggunakan kata "biasanya" di sini, karena aplikasi seperti Layar GNU dan TMux tampaknya mengacaukan
TERM
Variable.sumber
echo $TERM
untuk mencari tahu pengaturan kaya pada mashine Anda di berbagai konsol. Saya menggunakan[ $TERM == "linux" ] && echo do some stuff
di UbuntuIni harus bekerja dengan baik:
http://tldp.org/LDP/abs/html/fto.html
Jadi, ketika ini bernilai false (
[ ! -t 0 ]
) kita berada dalam lingkungan GUI.sumber
[ -t 0 ]
dan[ -t 1 ]
keduanya benar.[ -t 0 ]
berfungsi dengan baik pada konsol di Ubuntu (menggunakan CTRL ALT F1)Ada banyak cara Anda bisa melakukan itu.
Dalam bash, coba
Atau, di zsh, coba
sumber
echo 1
jika X sedang berjalan dan Anda masuk melalui tty1-6 atau ssh. Yang lain selalu melakukan "hal-hal non-X" - Saya pikir itu${CURRENT_VT[6]}
berarti baris ke-6 daripada char ke-6.zsh
) dan mungkin melakukan beberapa modifikasi jika Anda suka, untuk membuatnya bekerja di bash..zshrc
dan cariexport VT
. Saya menggunakan variabel untuk menyimpan Linux VT / console / tty saya (untuk zsh prompt) tetapi di X, saya hanya mengaturnya ke "X" (meskipun bukan VT). Tapi itu detail, Anda bisa menyelesaikannya dengan cara apa pun yang Anda suka di bash menggunakan prinsip yang sama.if [[ $DISPLAY ]]
Di komputer yang sama,
$DISPLAY
akan kembali misalnya0:0
di terminal emulator, tetapi tidak ada di terminal nyata. Ini dapat dengan mudah diuji dengan CtrlAltF1versus CtrlAltF7.Suatu
bash
kondisi berdasarkan$DISPLAY
akan terlihat sebagai berikut:sumber