it-swarm-tr.com

Terminal üzerinden bir GUI uygulaması nasıl başlatılır?

Bazı GUI uygulamaları Terminal komut satırı üzerinden temiz bir şekilde başlatılır, ancak bazıları işlemez ve Terminal'in uygulamanın sonlandırılmasını beklemesine neden olur. O zaman bile, bazıları komut satırını "serbest bırakmaz".

Gizemli işareti ve & soneki, terminalin süreci arka plana sokmasına neden oluyor gibi görünüyor (ama orada ne olduğundan emin değilim).

Terminal üzerinden bir uygulama başlatmanın bir yolu var mı? Böylece bir şey başlatmak gibi "bekle" etkisi olmaz Alt+F2?

Komut satırının hemen arka planda olmasını ve terminalde hala arka planda bir şey olmadan tekrar olmasını istiyorum.

78
Peter.O

Gedit'in durumunda, ben sadece sürekli bir kopyasını tutarım. Çalışan bir kopyanız olduğu sürece, gedit işlevini terminalden çağırmak ve ardından terminali kapatmak gedit'i öldürmez.

Diğer şeyler için, başkalarının söylediklerini de işe yarayabilir. Ben Nohup.. hayranıyım. Ama bir terminale ihtiyacınız varsa, ayırıp sonra yeniden takabilirsiniz, screen öğesine bakmak istersiniz.

  1. Bir terminalde çalıştırın ve daha sonra çıkışı zorlayan bir şey çalıştırın. Django geliştirme sunucusunu kullanıyorum, ancak irssi veya hatta watch uptime iyi örnekler olurdu.
  2. Terminali öldür ve yenisini başlat.
  3. screen -r ve BOOM komutunu çalıştırın, geri döndünüz.

screen bundan çok daha büyük ve daha iyi bir terminal deneyimi için onu byobu ile birleştirebilirsiniz. Oku.

17
Oli

Varsayalım gedit, ayrılmış (aka. "Disowned", "disentangled", "decoupled") çalıştırmak istediğiniz programdır. Tam olarak ne yapmak istediğinize bağlı olarak farklı yollar vardır:

Program zaten çalışıyor

Çıkmamak:

disown -h zaten çalışmakta olan bir programla yapmak istiyorsanız (yani Nohup it 'i unuttuysanız) gitmenin yoludur. İlk önce kullanmayı durdurmak zorundasın. Ctrl+Z. Ardından, bg [jobId] (ör. bg 1) kullanarak arka plana girebilirsiniz. Çalışanların listesini jobs kullanarak jobId ile alırsınız. Bundan sonra disown -h %[jobId] kullanarak terminalden ayırabilirsiniz. Örnek terminal oturumu:

$ gedit 
^Z
[1]+  Stopped                 gedit
$ jobs
[1]+  Stopped                 gedit
$ bg 1
[1]+ gedit &
$ disown -h %1
$ exit

Program henüz başlatılmadı

Nohup

Nohup her zaman tüm makinelerde bulunmaz. Önceden ayırmak istediğinizi biliyorsanız, şunu kullanırsınız:

Nohup gedit &

Belki de Shell çıktısını ve programınızı sahte bir giriş kaynağına yönlendirmek isteyeceksiniz, o yüzden: Nohup ./myprogram > foo.out 2> bar.err < /dev/null &. Çıktının, rahatsız edilmemesini veya daha sonra kullanmasını yönlendirmek istersiniz. Boş-giriş, ssh içindeki hıçkıranların engellenmesine yardımcı olabilir.

Altkabuk:

İle benzer bir etki elde edebilirsiniz

$ (geany >/dev/null 2>&1 &)

Parantezler gedit'i çalıştırmak için yeni bir alt kabuk açar. >/dev/null 2>&1, Shell çıkışını hiçbir yere yönlendirmez (çıkışı bastırır). Ve sonunda &, süreci arkaplana koyar.

Terminal çoğullama

Ayrıca ekran veya byob kullanarak terminal çoğullama. Temel olarak programı kendi terminalinde çalıştırıyorsunuz. Gerçekten de diğer nedenlerle byobu önerebilirim. İlk adımlarınız için kullanışlı olabilecek boybu kısayolların bir listesi aşağıdadır:

İşe yarar:

  • F2 Yeni bir pencere oluştur
  • F3 Bir sonraki pencereye geç
  • F4 Önceki pencereye taşı
  • F6 Oturumdan ayrıl ve oturumu kapat
  • Shift-F6 Oturumdan ayırın, ancak oturumu kapatmayın
  • F7 Geri kaydırma/arama moduna girin
  • Ctrl-F5 Herhangi bir SSH/GPG soketini veya aracısını yeniden bağlayın

Daha az kullanışlı:

  • Shift-F2 Ekranı yatay olarak bölme
  • Ctrl-F2 Ekranı dikey olarak bölme
  • Shift-F3 Odağı bir sonraki bölmeye taşı
  • Shift-F4 Odağı bir önceki bölüme taşı
  • Shift-F5 Tüm bölmeleri daralt
  • F5 Tüm durum bildirimlerini yenile
  • F8 Geçerli pencereyi yeniden adlandır
  • F9 Byobu Konfigürasyon Menüsünü Başlatın
  • F12 GNU Ekranın Kaçış Anahtarı
  • Alt-Pageup Bu pencerenin geçmişini geriye doğru kaydır
  • Alt-Pagedown Bu pencerenin geçmişinde ilerleyin
  • Ctrl-a-! Byobu'nun tüm tuşlarını aç veya kapat

'At' daemon ve diğerleri

at, komut verilen bir zamanda bir komutu çalıştırmak için kullanılabilecek küçük ve kullanışlı bir araçtır. Bir komutu Kabuktan ayırmak 'kötüye kullanılabilir':

echo './myprogram myoption1 myoption2' | at now

Ayrıca setsid ve start-stop-daemon ifadelerine bakabilirsiniz, ancak diğer yöntemler yeterli olmalıdır.

84
con-f-use

Gizemli işareti ve "&" soneki, terminalin süreci arka plana koymasına neden oluyor gibi görünüyor ... (ama orada ne olduğundan emin değilim).

O yapar ve sık sık istediğin budur. & Kullanmayı unutursanız, programı ctrl-z ile askıya alabilir, ardından bg komutuyla arkaplana koyabilir ve bu Shell'i kullanmaya devam edebilirsiniz.

Stdin, stdout ve stderr işlemi hala terminale bağlı; bunları///dev/null dizininden veya başka bir dosyadan (örneğin, bir çıktı günlüğünü bir yere kaydedin) istediğiniz şekilde yönlendirebilirsiniz:

some-program </dev/null &>/dev/null &
# &>file is bash for 1>file 2>&1

İşlemi işlerde görebilir, ön plana geri getirebilir (fg komutu) ve sinyalleri gönderir (kill komutu).

Bazı grafik programları terminalden ayrılacak; eğer durum buysa, "normal" komutunu çalıştırdığınızda grafik programın başladığını göreceksiniz ve "çıkılıyor".


İşte kısa bir komut dosyası , runbg adını verdiğim ~/bin içine koyabilirsiniz:

#!/bin/bash
[ $# -eq 0 ] && {  # $# is number of args
  echo "$(basename $0): missing command" >&2
  exit 1
}
prog="$(which "$1")"  # see below
[ -z "$prog" ] && {
  echo "$(basename $0): unknown command: $1" >&2
  exit 1
}
shift  # remove $1, now $prog, from args
tty -s && exec </dev/null      # if stdin is a terminal, redirect from null
tty -s <&1 && exec >/dev/null  # if stdout is a terminal, redirect to null
tty -s <&2 && exec 2>&1        # stderr to stdout (which might not be null)
"$prog" "[email protected]" &  # [email protected] is all args

Yeniden yönlendirmeden önce programı ($ prog) arayacağım, böylece onu bulmadaki hatalar bildirilebilir. "Komutlarınızı çalıştırın ..."; çıktıyı bir yere kaydetmeniz gerekiyorsa, hala stdout/err dosyasını bir dosyaya yönlendirebilirsiniz.

Yönlendirmeler ve hata işleme dışında, bu htorque's answer komutuna eşittir.

25
Roger Pate

Bir uygulamayı başlatmak ve onu başlatılan terminal kullanımından ayırmak için &!.

firefox &!
22
Rick

Nohup kullan

Nohup, verilen sinyallerin yok sayılmasıyla verilen bir komutu çalıştıran bir programdır, böylece komut üst işlemi sona erdikten sonra arka planda çalışmaya devam edebilir. manpage

Örneğin:

Nohup gedit something
20
Florian Diesch

Terminali açın, screen yazın, çalıştırmak istediğiniz komutu yazın, terminali kapatın. Program GNU Screen oturumunda çalışmaya devam etmelidir.

4
RobinJ

Bu benim için çalıştı:

$ (Nohup gedit 2>/dev/null &)
1
wesleycoder

xdg açık

Bu genel amaçlı yardımcı programa bir göz atın: https://linux.die.net/man/1/xdg-open

Bu, dosya yöneticinizde göreceli bir konum açar.

 $ xdg-open .

Bu pdf okuyucusunda pdf dosyasını açacaktır.

 $ xdg-open foo.pdf

Web URL'lerini bile sağlayabilirsiniz

$ xdg-open www.google.com
1
Jonathan Komar

Birçok insanın düşündüğü gibi, Nohup göz önünde bulundurulması gereken şeydir. Ancak Nohup sabitleri terminalde açık kalır ve terminaldeki program aktivitesini tahriş edicidir. Bunu önlemek için terminali daha sonra kapatabilirsiniz. Kullandığım çok basit bir geçici çözüm buldum.

Nohup gedit & exit

Ve bu kadar. Gedit başlar ve gedit başladığında terminali kapatır. Gedit şimdi terminalle ilişkili olmadığı için aktif kalır.

0
Lokesh Devnani

Bu bile bir komut dosyası içinde çalışır (Diğer adlar gibi, '&' fragmanının normalde komut dosyalarına izin vermez çünkü etkileşimli değildirler):

bash -i >/dev/null 2>&1 <<<'Nohup gedit &'
0
Sam

Bu benim için çalıştı:

$ (some-program &) &>/dev/null

# Examples:
$ (gedit &) &>/dev/null
$ (google-chrome &) &>/dev/null
0
Eyal Levin