Bir programı çalıştıran X sunucusu olmadığını düşünerek kandırmak


28

Hem metin kullanıcı arayüzü hem de grafiksel kullanıcı arayüzü ile çalışabilen bir programım var.

Birini ya da diğerini zorlamak için herhangi bir komut satırı anahtarından yoksundur, sanırım bir şekilde X olup olmadığımızı otomatik olarak algılar (örneğin, sanal bir terminalden çalıştırıyorsam, metin moduna girer ve çalıştırırsam) bir X terminali emülatörü, ayrı bir grafik penceresi açar).

Metin moduna zorlamak ve X terminalinin içinde çalışmasını istiyorum. Bunu nasıl yapacağım?

Yanıtlar:


40

Genellikle sadece

unset DISPLAY

Terminalin komut satırında. Bazı uygulamalar bundan daha akıllıdır ve aslında pseudoterminal'e karşı konsolun izinlerini ve türünü kontrol eder.


7
Ne yazık ki, bazı gerçekten obstinate yazılım set edilmemiş ise varsayalım DISPLAY=:0. Bunu farklı bir kullanıcı altında çalıştırarak ve geri döngü X11'i düşürmek için iptables kullanarak düzeltebilirsiniz, ancak bu oldukça iğrenç.
Kevin

2
@Kevin belki DISPLAY=invalid:0?
kaynakjedi

2
@PeterCordes veya komutu envbir alt kabuk yerine env -u DISPLAY emacs foo.c
uygulayabilirsiniz

2
@PeterCordes emacs, X kullanımını devre dışı bırakmak için bir komut satırı işaretine sahiptir emacs -nw. Fakat eğer yapmazsa, bunun yerine DISPLAY= emacsişe yarar .
kasperd

2
DISPLAY=0.0.0.0:0ad sunucusu araması yapmadan anında başarısız olur.
pts

31

Tek bir komut için X'i devre dışı bırakmak istiyorsanız yazabilirsiniz

DISPLAY= ./my_command

Stratejik boşluğa sonra dikkat edin =. Daha genel olarak, komutunuzu <variable>=<value>boşluklarla ayrılmış bir diziyle önek ekleyerek bir işlem için ortam değişkenlerini ayarlayabilirsiniz . Boşluk ayırıcı olarak hizmet ettiğinden, =hemen ardından bir boşluk önceki değişkeni temizler. Komut olarak bir alt kabuk kullanarak ve ardından ortamını yazdırarak bu öneklerin etkisine bakabiliriz. Mesela:

$ A=a B=b C= D=d sh
$ echo $A $B $C $D

Bu yazdıracak

a b d

Bu, alt kabuğun ortamının gerçekten beklenenden farklı olduğunu göstermektedir. Kabuk değiştirme işleminin bağımsız değişkenlere geçilmeden önce gerçekleştiğini unutmayın echo, bu nedenle komut satırında sanki (iki boşluk ile) çıktı arasında bve diçinde yalnızca tek bir boşluk vardır echo a b d.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.