Apa yang harus saya ketahui untuk menggunakan Layar GNU dengan benar? [Tutup]

106

Saya baru saja memperkenalkan layar GNU kepada seorang teman dan mereka mengalami kesulitan untuk membiasakannya. Itu membuat saya berpikir tentang hal-hal penting yang perlu dia ketahui tentang utilitas Layar yang sangat baik , hal yang sama yang menurut Anda bermanfaat untuk diajarkan kepada seseorang, seorang pemula, dari bawah ke atas. Apa sajakah analogi dan tip praktis untuk mengingat binding, dll.?

Itu akan luar biasa.

Henry B
sumber
1
Ada beberapa jawaban bagus untuk ini juga di sini: stackoverflow.com/questions/70661/what-is-gnu-screen
Chris
Seseorang telah memposting pertanyaan serupa dengan ini di Server Fault .
Vagnerr
Jika seseorang baru saja memulai dan mengalami kesulitan dengan Layar, mereka mungkin ingin memeriksa tmux alternatif .
Christopher Bottoms

Jawaban:

93

Saya telah menggunakan Screenselama lebih dari 10 tahun dan mungkin menggunakan kurang dari setengah fitur. Jadi sudah pasti tidak perlu mempelajari semua fiturnya dengan segera (dan saya tidak akan merekomendasikan untuk mencoba). Perintah saya sehari-hari adalah:

^A ^W - window list, where am I
^A ^C - create new window
^A space - next window
^A p - previous window
^A ^A - switch to previous screen (toggle)
^A [0-9] - go to window [0-9]
^A esc - copy mode, which I use for scrollback

Saya pikir itu saja. Saya terkadang menggunakan fitur layar terbagi, tetapi yang pasti tidak setiap hari. Tip lainnya adalah jika layar sepertinya terkunci karena Anda menekan beberapa kombinasi tombol acak secara tidak sengaja, lakukan keduanya ^Qdan ^A ^Qcoba buka kuncinya.

Greg Hewgill
sumber
1
^ A k harus ditambahkan ke daftar untuk menutup jendela.
Léo Léopold Hertz 준영
7
Saya tidak menggunakan ^ A k karena kemungkinan membunuh lebih dari yang saya inginkan secara tidak sengaja. Sebagai gantinya, saya hanya keluar dari shell di jendela menggunakan ^ D (atau exit). Jendela layar secara otomatis menutup setelah keluar dari shell terakhir di jendela.
Greg Hewgill
9
"^ Mode esc - copy, yang saya gunakan untuk scrollback" Anda adalah dewa di antara manusia, Pak.
Rob Howard
4
^ A [melakukan hal yang persis sama.
atx
Terima kasih untuk trik ^ A ^ D ... Saya terjebak dan tidak bisa kembali ke sesi saya. Jika ini membantu seseorang, saya menulis artikel beberapa waktu lalu yang menjelaskan dasar layar seperti di sini tetapi memiliki beberapa trik lagi geekpad.ca/blog/post/…
Patrick Lupakan
36

Saya tidak bisa terbiasa dengan layar sampai saya menemukan cara untuk mengatur 'bilah status' di bagian bawah layar yang menunjukkan 'tab' atau 'layar virtual' yang Anda gunakan dan yang lain ada. Ini pengaturan saya:

[roel@roel ~]$ cat .screenrc
# Here comes the pain...
caption always "%{=b dw}:%{-b dw}:%{=b dk}[ %{-b dw}%{-b dg}$USER%{-b dw}@%{-b dg}%H %{=b dk}] [ %= %?%{-b dg}%-Lw%?%{+b dk}(%{+b dw}%n:%t%{+b dk})%?(%u)%?%{-b dw}%?%{-b dg}%+Lw%? %{=b dk}]%{-b dw}:%{+b dw}:"

backtick 2 5 5 $HOME/scripts/meminfo
hardstatus alwayslastline "%{+b dw}:%{-b dw}:%{+b dk}[%{-b dg} %0C:%s%a %{=b dk}]-[   %{-b dw}Load%{+b dk}:%{-b dg}%l %{+b dk}] [%{-b dg}%2`%{+b dk}] %=[ %{-b dg}%1`%{=b dk} ]%{-b dw}:%{+b dw}:%<"

sorendition "-b dw"
[roel@roel ~]$ cat ~/scripts/meminfo
#!/bin/sh
RAM=`cat /proc/meminfo | grep "MemFree" | awk -F" " '{print $2}'`
SWAP=`cat /proc/meminfo | grep "SwapFree" | awk -F" " '{print $2}'`
echo -n "${RAM}kb/ram ${SWAP}kb/swap"
[roel@roel ~]$
Roel
sumber
3
Lihat byobu (profil-layar), juga: launchpad.net/byobu
Drew Stephens
Ini luar biasa, terima kasih. Saya berjuang untuk mencari tahu apa yang sebenarnya terjadi ketika saya mencoba membagi terminal saya. Saya tidak menyadari bahwa saya perlu menjalankan layar terlebih dahulu agar salah satu dari perintah ini berfungsi, konyol, saya tahu.
Ogaday
30

Ctrl+ A? - tunjukkan layar bantuan!

James Muscat
sumber
Saya sangat setuju dengan ini. Ini jauh lebih berguna daripada jawaban lain, karena Anda dapat menguranginya dengan perintah lain, tetapi Anda tidak dapat melakukannya sebaliknya. Juga jauh lebih mudah untuk mengingatnya.
Léo Léopold Hertz 준영
26

Jika teman Anda memiliki kebiasaan menekan ^Auntuk sampai ke awal baris di Bash, dia akan mengalami beberapa kejutan, karena ^Atombol perintah layar mengikat. Biasanya saya berakhir dengan layar beku, mungkin karena beberapa tombol acak yang saya tekan setelah ^A:-)

Dalam kasus seperti itu saya coba

^A sdan ^A qblokir / buka blokir pengguliran terminal

untuk memperbaikinya. Untuk pergi ke awal baris di dalam layar, urutan kuncinya adalah ^A a.

agnul
sumber
1
Sangat mudah untuk mengubah karakter melarikan diri dari ^ A ke yang lain. Saya telah memasukkan detailnya dalam jawaban saya.
Andrew Johnson
3
+ 1 + 1 + 1 ^ A s ... terima kasih ... layar terkunci :)
Yuji 'Tomita' Tomita
1
@agnul +1 untuk Anda untuk ^ A a Saya pengguna ^ A dalam sesi bash biasa dan saya tidak dapat menggunakannya di dalam sesi layar. Terima kasih atas tip yang bagus! :)
icasimpan
Terima kasih 100 kali kepada Anda karena memberi tahu saya cara mengaktifkan ctrl A di dalam layar. Telah mencari ini sepanjang hidupku.
pengguna674669
Apakah huruf 'A' dan 'a' sensitif di sini?
Aditya MP
12

Anda dapat memetakan ulang kunci escape dari Ctrl+ Amenjadi kunci lain pilihan Anda, jadi jika Anda menggunakannya untuk hal lain, misalnya untuk pergi ke awal baris di bash, Anda hanya perlu menambahkan baris ke ~ /. file screenrc. Untuk membuatnya ^ b atau ^ B, gunakan:

escape ^bB

Dari baris perintah, gunakan sesi nama untuk mengontrol beberapa sesi. Saya menggunakan satu sesi per tugas, masing-masing dengan banyak tab:

  screen -ls # Mencantumkan sesi layar Anda saat ini
  screen -S <name> # Membuat sesi layar baru yang disebut nama
  screen -r <name> # Menghubungkan ke sesi layar bernama

Saat menggunakan layar Anda hanya perlu beberapa perintah:

  ^ A c Buat shell baru
  ^ A [0-9] Ganti shell
  ^ A k Bunuh shell saat ini
  ^ A d Putuskan dari layar
  ^ A? Tunjukkan bantuannya

Referensi cepat yang sangat bagus dapat ditemukan di sini . Layak untuk menandai.

Andrew Johnson
sumber
Saya menggunakan sesi layar bersarang. Saya memulai yang luar dengan screen -e^oosehingga saya dapat menggunakan Ctrl + O untuk itu dan kemudian memulai yang dalam screen -msehingga mereka memulai sesi baru.
staticsan
1
Anda dapat mengubah kunci melarikan diri dengan cepat. Dalam sesi layar berjalan, ketik ^A :diikuti oleh \Bbdiikuti dengan Enter untuk mengatur kunci melarikan diri ke ^ B. Secara umum, ^A :memungkinkan Anda mengevaluasi perintah yang Anda .screenrcpahami.
malana
8

Beberapa tip bagi mereka yang terbiasa dengan layar, tetapi yang cenderung tidak mengingat hal-hal yang mereka baca di halaman manual:

  • Untuk mengubah nama jendela layar sangat mudah: ctrl+ A shift+ A.
  • Apakah Anda melewatkan pesan terakhir dari layar? ctrl+ a ctrl+ makan menampilkannya lagi untuk Anda.
  • Jika Anda ingin menjalankan sesuatu (seperti membuntuti file) dan layar memberi tahu Anda saat ada perubahan, gunakan ctrl+ A shift+ mpada jendela target. Peringatan: ini akan memberi tahu Anda jika ada perubahan.
  • Ingin memilih window 15 secara langsung? Coba ini di .screenrcfile Anda :
bind  ! select 11
bind  @ select 12
bind \# select 13
bind  $ select 14
bind  % select 15
bind \^ select 16
bind  & select 17
bind  * select 18
bind  ( select 19
bind  ) select 10

Itu memberikan ctrl+ a shift+ 0 through 9untuk windows 10 hingga 19.

statika
sumber
7

Ctrl+ Aadalah perintah dasarnya

Ctrl+ A N= pergi ke layar *** N *** ext

Ctrl+ A P= pergi ke layar sebelumnya *** P ***

Ctrl+ A C= *** C *** buat layar baru

Ctrl+ A D= *** Letakkan layar Anda

Niko Gunadi
sumber
6

http://www.debian-administration.org/articles/34

Saya menulisnya beberapa tahun yang lalu, tetapi ini masih merupakan pengantar yang bagus yang mendapat banyak tanggapan positif.


sumber
Tautan (efektif) rusak:$VAR1 = \'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (111 "Connection refused") at ../lib/Singleton/DBI.pm line 95. ';
Peter Mortensen
6

Saya "harus" menambahkan ini: tambahkan

bind s

kepada Anda .screenrc, jika Anda - seperti saya - biasanya menggunakan jendela terpisah, sebagai C-a Sjendela yang sebenarnya, tetapi C-a smembekukannya. Jadi saya baru saja menonaktifkan pintasan freeze.

Zsolt Botykai
sumber
2
^-Qbatal jika Anda menekan^-S
Plato
Anda benar @Plato. Masih saya bekerja di lingkungan dengan pengguna, yang tidak akan menghafal hampir semua pintasan ... Saya perlu menonaktifkannya.
Zsolt Botykai
NP saya baru saja menemukan utas ini pertama kali dan mencari 'beku' dan tidak menemukan apa yang saya cari
Plato
6

Ctrl+ aadalah kunci khusus.

Ctrl+ a d- [d] etach, biarkan program (irssi?) di latar belakang, pulanglah.

Ctrl+ a c[c] buat jendela baru Ctrl+ a 0-9peralihan antar jendela dengan nomor

screen -r - kembali ke sesi terpisah

Itu mencakup 90% kasus penggunaan. Jangan mencoba menampilkan semua fungsionalitas pada satu waktu.

tadeusz.dll
sumber
Meskipun, ketika saya pertama kali belajar tentang screensaya bingung tentang apa sebenarnya yang dimaksud dengan melepaskan dan memasang kembali layar. Kutipan : "... Anda dapat menjalankan tugas dalam waktu lama di konsol terpisah (seperti ssh pada mesin jarak jauh, sesi IRC,…) pada mesin tertentu, lepas dari sesi, berpindah dari satu lokasi fisik ke lokasi lain, sambungkan ke mesin melalui ssh dan pasang kembali ke sesi layar untuk terus bekerja. "
JW.
4

Tidak terlalu penting tidak hanya terkait dengan layar, tetapi mengaktifkan 256 warna di terminal saya, Layar GNU dan Vim meningkatkan pengalaman layar saya secara besar-besaran (terutama karena saya membuat kode di Vim sekitar 8 jam sehari - ada beberapa skema warna yang bagus untuk mata).

jkramer.dll
sumber
Terima kasih! Itu menggangguku untuk sementara waktu.
Dan Goldstein
3

Modifikasi pertama yang saya lakukan pada .screenrc adalah mengubah perintah escape. Tidak seperti kebanyakan dari Anda, saya tidak suka urutan Ctrl-A default karena interferensi dengan fungsionalitas mendasar di hampir setiap konteks lainnya. Di file .screenrc saya, saya menambahkan:

melarikan diri `e

Itu backtick-e.

Hal ini memungkinkan saya untuk menggunakan backtick sebagai tombol escape (misalnya untuk membuat layar baru, saya menekan backtick-c, melepaskan backtick-d, backtick-? Is help, backtick-backtick adalah layar sebelumnya, dll.). Satu-satunya cara itu mengganggu (dan saya harus menghentikan kebiasaan itu) adalah menggunakan backtick pada baris perintah untuk menangkap output eksekusi, atau menempelkan apa pun yang berisi backtick. Untuk yang pertama, saya telah memodifikasi kebiasaan saya dengan menggunakan konvensi BASH $ (command). Untuk yang terakhir, saya biasanya hanya membuka xterm lain atau melepaskan dari layar lalu menempelkan konten yang berisi backtick. Terakhir, jika saya ingin memasukkan backtick literal, saya cukup menekan backtick-e.

Gary Chambers
sumber
cemerlang. Saya menggunakan backtick sepanjang waktu, meskipun saya tahu saya harus menggunakan $ (...), jadi sekarang saya rasa saya mungkin harus mengubah cara saya. Backtick sedikit keluar dari jalan, tapi bagus untuk memiliki kunci tunggal tanpa perlu pengubah. Tapi mengapa "e", dan bagaimana Anda mengingatnya?
iconoclast
Saya baru saja menguji 'escape' '' dan berfungsi dengan baik dan tampaknya lebih mudah diingat. Jika Anda memukul balik dan tidak mendapatkan apa yang Anda harapkan, pukul saja lagi.
iconoclast
Saya telah melakukan ini, tetapi apakah ada cara untuk benar-benar mengetik backtick saat berada di layar? Kadang-kadang, hal ini perlu dilakukan, dan saya benci harus melepaskan diri untuk melakukannya ...
Guillochon
@Guillouchon: komentar sebelumnya menjelaskan hal itu dengan tepat.
tripleee
3

Ada beberapa pekerjaan menarik yang sedang dilakukan untuk mendapatkan pengaturan layar GNU yang baik yang terjadi secara default di versi Ubuntu Server berikutnya, yang termasuk menggunakan bagian bawah layar untuk menampilkan semua jendela serta detail mesin berguna lainnya (seperti jumlah pembaruan tersedia dan apakah mesin perlu di-boot ulang). Anda mungkin dapat mengambilnya .screenrcdan menyesuaikannya dengan kebutuhan Anda.

Perintah paling berguna yang saya miliki .screenrcadalah sebagai berikut:

shelltitle "$ |bash" # Make screen assign window titles automatically
hardstatus alwayslastline "%w" # Show all window titles at bottom line of term

Dengan cara ini saya selalu tahu jendela apa yang terbuka, dan apa yang sedang berjalan di dalamnya saat ini juga.

David Dean
sumber
3

Saya menggunakan yang berikut ini untuk ssh:

#!/bin/sh
# scr - Runs a command in a fresh screen
#
# Get the current directory and the name of command

wd=`pwd`
cmd=$1
shift

# We can tell if we are running inside screen by looking
# for the STY environment variable.  If it is not set we
# only need to run the command, but if it is set then
# we need to use screen.

if [ -z "$STY" ]; then
        $cmd $*
else
        # Screen needs to change directory so that
        # relative file names are resolved correctly.
        screen -X chdir $wd

        # Ask screen to run the command
        if [ $cmd == "ssh" ]; then
                screen -X screen -t ""${1##*@}"" $cmd $*
        else
                screen -X screen -t "$cmd $*" $cmd $*
        fi
fi

Lalu saya mengatur alias bash berikut:

vim() {
        scr vim $*
}

man() {
        scr man $*
}

info() {
        scr info $*
}

watch() {
        scr watch $*
}

ssh() {
        scr ssh $*
}

Ini membuka layar baru untuk alias di atas dan jika menggunakan ssh, itu mengganti nama judul layar dengan nama host ssh.

Peter Mortensen
sumber
2

Saya ingin menyiapkan sesi layar dengan nama deskriptif untuk windows. ^ a A akan memungkinkan Anda memberi nama pada jendela saat ini dan ^ a "akan memberi Anda daftar jendela Anda. Setelah selesai, lepaskan layar dengan ^ iklan dan pasang kembali dengan layar -R

innaM
sumber
1

Saya suka menggunakan screen -d -RRuntuk membuat / melampirkan secara otomatis ke layar tertentu. Saya membuat fungsi bash untuk membuatnya lebih mudah ...

function mkscreen
{
    local add=n

    if [ "$1" == '-a' ]; then
        add=y
        shift;
    fi

    local name=$1;
    shift;
    local command="$*";

    if [ -z "$name" -o -z "$command" ]; then
        echo 'Usage: mkscreen [ -a ] name command

    -a          Add to .bashrc.' 1>&2;
        return 1;
    fi

    if [ $add == y ]; then
        echo "mkscreen $name $command" >> $HOME/.bashrc;
    fi

    alias $name="/usr/bin/screen -d -RR -S $name $command";

    return 0;
}

function rmscreen
{
    local delete=n

    if [ "$1" == '-d' ]; then
        delete=y
        shift;
    fi

    local name=$1;

    if [ -z "$name" ]; then
        echo 'Usage: rmscreen [ -d ] name

    -d          Delete from .bashrc.' 1>&2;
        return 1;
    fi

    if [ $delete == y ]; then
        sed -i -r "/^mkscreen $name .*/d" $HOME/.bashrc;
    fi

    unalias $name;

    return 0;
}

Mereka membuat alias untuk /usr/bin/screen -d -RR -S $name $command. Misalnya, saya suka menggunakan irssi dalam sesi layar, jadi di .bashrc saya (di bawah fungsi itu), saya punya:

mkscreen irc /usr/bin/irssi

Kemudian saya cukup mengetikkan ircterminal untuk masuk ke irssi. Jika layar 'irc' belum ada, maka itu dibuat dan / usr / bin / irssi dijalankan darinya (yang terhubung secara otomatis, tentu saja). Jika sudah berjalan maka saya hanya melampirkan kembali, secara paksa melepaskan contoh lain yang sudah terpasang padanya. Cukup bagus.

Contoh lain adalah membuat alias layar sementara untuk perldocs saat saya menemukannya:

mkscreen perlipc perldoc perlipc
perlipc # Start reading the perldoc, ^A d to detach.
...
# Later, when I'm done reading it, or at least finished
# with the alias, I remove it.
rmscreen perlipc 

Opsi -a (harus menjadi argumen pertama) menambahkan alias layar ke .bashrc (jadi tetap ada) dan -d menghapusnya (ini berpotensi merusak, jadi gunakan dengan resiko sendiri). xD

Menambahkan:

Bash-isme lain yang menurut saya nyaman saat bekerja banyak dengan layar:

alias sls='/usr/bin/screen -ls'

Dengan cara itu Anda dapat membuat daftar layar Anda dengan lebih sedikit penekanan tombol. Saya tidak tahu apakah slsbertabrakan dengan utilitas yang ada, tetapi tidak pada saat itu di sistem saya, jadi saya melakukannya.

bambam
sumber
0

^ AA beralih kembali ke layar yang baru Anda gunakan.

dummy
sumber
2
^ A ^ A beralih kembali, ^ AA memungkinkan mengubah nama judul jendela.
Andrey Starodubtsev
0

Ctrl+ Aadalah karakter khusus yang hebat untuk orang-orang Unix, tetapi jika Anda menggunakan layar untuk berbicara dengan OpenVMS , maka tidak dapat ^ A akan membuat Anda botak sebelum waktunya.

Di VMS , jika Anda mengedit perintah DCL sebelum eksekusi dari buffer riwayat, mode Sisipkan tidak aktif (harus karena beberapa alasan saya tidak akan masuk ke sini) ... untuk menyalakannya sehingga Anda tidak Jika tidak mengetikkan perintah Anda secara berlebihan daripada spasi, Anda harus menekan `^ A.

pengguna2146463
sumber
Saya menggunakan screen -e ^Lluntuk alasan serupa; Saya tidak bisa melupakan untuk mengetik ctrl-A untuk pergi ke awal baris di Emacs. Untungnya, ctrl-L adalah tombol yang jarang saya butuhkan, dan juga IMHO terhubung dengan baik dengan arti umumnya (gambar ulang / hapus layar).
tripleee
@tripleee: My .screenrchas escape ^@^@, yang menggunakan karakter null daripada control-A. Pada kebanyakan sistem, Anda dapat memasukkan karakter nol sebagai ruang kontrol, yang sangat mudah untuk diketik. (Saya memiliki sesi layar bersarang yang berjalan di dalam jendela di sesi utama saya; untuk yang itu saya miliki escape ^]^].)
Keith Thompson