bashrc: จะรู้หน้าต่าง X ได้อย่างไร?


10

มีส่วนร่วมในตัวฉัน~/.bashrcซึ่งกำหนดให้ $ EDITOR เป็น gvim มันทำงานได้ดีเมื่อฉันอยู่ในหน้าต่าง X อย่างไรก็ตามถ้าฉันไปที่เวิร์กสเตชันของฉัน (จากเวิร์กสเตชันอื่น) gvim เริ่มบ่นว่า "ไม่สามารถเปิดจอแสดงผล"

ดังนั้นฉันต้องการที่จะใส่ifคำสั่งใน bashrc, ว่าถ้าหน้าต่าง X พร้อมใช้งานแล้วใช้ gvim มิฉะนั้นปล่อยให้มันเป็นกลุ่ม

ฉันจะบรรลุสิ่งนั้นได้อย่างไร

คำตอบ:


11

วิธีหนึ่งในการทำเช่นนี้ทดสอบการมีอยู่ของตัวแปรสภาพแวดล้อม DISPLAY:

if [ "$DISPLAY" ]
then
    EDITOR=gvim
else
    EDITOR=vim
fi

ในบางกรณี DISPLAY จะถูกตั้งค่าแม้ว่า gvim ของคุณจะไม่สามารถติดต่อเซิร์ฟเวอร์ X ได้ ในกรณีดังกล่าวให้ใช้โปรแกรมRunningX :

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi

if [[ $DISPLAY ]]สำหรับผู้สนใจรัก Double Bracket
Serge Stroobandt

7

$DISPLAYตัวแปรสภาพแวดล้อมควรจะกำหนดให้บางสิ่งบางอย่างถ้าคุณอยู่ใน X และล้างถ้าคุณไม่ได้เชื่อมต่อกับจอแสดงผล

ดังนั้นคุณสามารถใช้สิ่งนี้:

if [ -n "$DISPLAY" ]; then
    alias vim='gvim'
else
    alias vim='vim'
fi

แต่มีวิธีแก้ไขปัญหาอื่น มันเรียกว่า ssh X forwarding

วิ่ง

ssh -X yourworkstation

จากนั้นคุณสามารถเรียกใช้ vim บนเครื่องที่คุณมีอยู่แล้วและจะแสดงบนเครื่องที่คุณใช้งาน X



1

ในขณะที่นี่ไม่ใช่คำตอบสำหรับคำถามของคุณฉันคิดว่ามันอาจมีประโยชน์ที่จะชี้ให้เห็นว่าถ้าคุณกำลัง sshing จากหนึ่งเวิร์กสเตชันที่ใช้ X * ไปยังเวิร์กสเตชันอื่นคุณสามารถใช้ gvim ได้จริงถ้าคุณตั้งค่า X forwarding ด้วย ssh ข้อมูลหน้าต่างจะถูกส่งผ่านเครือข่ายและ gvim จะปรากฏขึ้นเช่นถ้าเรียกใช้ในเครื่อง

เพิ่มสิ่งต่อไปนี้ใน ~ / .ssh / config

Host *
   ForwardX11 yes 

ตอนนี้คุณจะสามารถเรียกใช้ gvim ได้แล้ว

หากคุณเป็นเวิร์กสเตชันต้นกำเนิดคือ Windows และไม่ได้ใช้ X คุณสามารถเริ่มต้นเซิร์ฟเวอร์ X ได้โดยใช้ Cygwin เมื่อติดตั้งแล้วคุณสามารถกำหนดค่าไคลเอนต์ ssh ยอดนิยมเช่น PuTTy เพื่อทำการส่งต่อ X11 จากนั้น gvim จะปรากฏขึ้นในสิ่งที่ดูเหมือนจะเป็นหน้าต่างตกแต่งหน้าต่างแบบเนทีฟ


0

เพียงตรวจสอบหนึ่งในตัวแปรสภาพแวดล้อมที่ Xorg ตั้งค่าเมื่อเริ่มต้นเช่น XLOCAL ที่มีข้อมูลเกี่ยวกับเซสชัน X11 ปัจจุบัน


0

ฉันชอบคำตอบของ garyjohn ที่ใช้ RunningX เพราะมันฉลาดเกี่ยวกับตัวแปร DISPLAY ที่ไม่ดี แต่ไม่ว่างเปล่า

แต่ .. ฉันอยากจะไปให้ดีกว่านี้ ฉันมักจะใช้เซสชันหน้าจอ ฉันอาจเริ่มเซสชันหน้าจอที่บ้าน DISPLAY ถูกกำหนด จากนั้นฉันก็ไปที่อื่น DISPLAY ยังคงถูกกำหนดและมันจะแสดง ... ที่บ้าน! ดังนั้น .. ฉันจะส่งออก $ DISPLAY = ' นี่เป็นเรื่องปกติ แต่เนื่องจากคำตอบนั้นตรวจสอบแล้วและพบว่าตัวแปร DISPLAY ที่ถูกต้องในเวลานั้น. bashrc ตอนแรกที่รัน EDITOR จะยังคงถูกตั้งค่าเป็น gvim

ฉันมาที่นี่เพื่อหาทางแก้ไขปัญหาที่คล้ายกันฉันต้องการใช้ yelp สำหรับการเรียกดู manpage แบบ X-GUI แต่จะเลื่อนลงไปที่คำสั่ง man แบบดั้งเดิมโดยอัตโนมัติเมื่อไม่ได้ใช้ X. โดยขึ้นอยู่กับสิ่งที่ฉันอ่านที่นี่

man () {
    if RunningX
    then
        yelp "man:$@";
    else
        /usr/bin/man "$@";
    fi
}

ฉันคิดว่าสำหรับปัญหาของ EDITOR เราสามารถทำสิ่งต่อไปนี้ได้:

EDITOR=vim
vim () {
    if RunningX
    then
        gvim "$@";
    else
        vim "$@";
    fi
}

ฉันจะเพิ่งโพสต์ว่าไม่มีเรื่องราวยาว ๆ แต่ฉันยังไม่ได้ทดสอบ ฉันคิดว่าตัวเองเป็นมือใหม่ทุบตี ฉันทดสอบ 'คำสั่ง man' ของฉันมันใช้งานได้! ฉันใช้ emacs สำหรับบรรณาธิการของฉัน แต่มันตรวจสอบตัวเองสำหรับ X ฉันไม่ได้ติดตั้ง gvim

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.