X11 Chuyển tiếp qua màn hình Gnu, có khả thi không?


32

Tôi sử dụng GNU Screen liên tục. Nhưng, tôi đã cố gắng tìm hiểu xem có cách nào đó để ứng dụng X11 chuyển tiếp qua màn hình khi tôi đang ssh-ing (Đó có phải là một từ không?). Hiện tại nếu tôi cố chạy 'gedit' qua màn hình, nó sẽ mở trên máy tính 'máy chủ' của tôi chứ không phải trên máy khách của tôi. Nếu tôi làm như vậy bên ngoài màn hình, thì mọi thứ đều ổn. Nhưng tôi muốn mọi thứ đều ổn khi tôi sử dụng màn hình!

Cảm ơn!

PS: Tôi đã giải quyết vấn đề và tôi thấy đề cập đến xmove, nhưng dường như tôi không thể tìm thấy gói chứa xmove trên Ubuntu của tôi. (Ubuntu 10.10)


Tôi không có thời gian để tìm một câu trả lời hoàn chỉnh bây giờ, nhưng bạn cần một số biến môi trường để được đặt chính xác. Bạn có thể tìm ra cái nào nhìn vào môi trường bên ngoài màn hình.
JanC

Câu trả lời:


32

Để thực hiện thủ công, một khi bạn đã SSH, nhưng trước khi bạn gắn lại màn hình, hãy kiểm tra biến môi trường HIỂN THỊ của bạn:

echo $DISPLAY

Khi bạn đã gắn lại vào màn hình, hãy đặt rõ ràng biến môi trường:

export DISPLAY=:N.0

Trong đó : N.0 là những gì echohiển thị trước khi đính kèm. Điều này sẽ không hoàn hảo, vì một số ứng dụng có thể sẽ nói chuyện với Phiên D-Bus, việc phức tạp hơn một chút để gửi qua kết nối SSH.


1
Tuyệt vời! Điều này dường như hoạt động cho hầu hết các ứng dụng. Tôi đang cố gắng lên màn hình của mình 'fu'. Bạn có ý tưởng nào không hoặc bạn có thể chỉ cho tôi hướng đi chung về cách tôi có thể tự động hóa việc này không? Cảm ơn bạn!
Sandro

Tôi đã làm những điều kỳ lạ như viết kịch bản một cái gì đó như: echo $DISPLAY > $HOME/.display.txt; screen -x -dvà sau đó một màn hình khác để chạy nóexport DISPLAY=$(cat $HOME/.display.txt)
Kees Cook

đó chính xác là những gì tôi đã cố gắng thực hiện. Nhưng đến nay vẫn không gặp may. Cố gắng để việc xuất khẩu đó xảy ra khá khó khăn vì việc chạy nó trong một kịch bản là không tốt, tôi cần phải tìm nguồn nào đó ... và setenv dường như cũng không có cảm ứng kỳ diệu.
Sandro

Để nguồn script type . /path/to/scriptnơi scriptexport DISPLAY=$(cat $HOME/.display.txt)
Kees Nấu

Điều này giả định rằng bạn không có màn hình tự động bắt đầu khi đăng nhập (a la byobu)
Một sinh viên tại trường đại học

11

có một chương trình gọi là xpra trong kho, nó giống như màn hình gnu cho x11. không quá khó để làm việc với:

X Ứng dụng từ xa liên tục

Xpra cung cấp cho bạn chức năng của GNU Screen cho các ứng dụng X.

Nó cho phép người dùng xem các ứng dụng X từ xa trên máy cục bộ của họ, đồng thời ngắt kết nối và kết nối lại với máy từ xa mà không làm mất trạng thái của các ứng dụng đang chạy.


2
Tôi đã viết về cách thực sự tích hợp xpra với Screen để đạt được sự bền bỉ của cả bảng điều khiển và ứng dụng X11: krlmlr.github.io/integrating-xpra-with-screen . Làm việc cho tôi.
krlmlr

7

Byobu tự động gắn lại các tác nhân ssh và gpg. Tôi có thể làm cho nó gắn lại biến hiển thị thành, nếu điều đó hữu ích cho bạn ...


Nó dường như thậm chí không vượt qua biến hiển thị trong các phiên MỚI được tạo trong phiên ssh với chuyển tiếp X11. Thật tuyệt vời nếu nó đã làm ... Tôi đã ngừng sử dụng nó vì đau đầu vì phải tắt chế độ tự động khởi động để người ta có thể sử dụng chuyển tiếp X11.
Một sinh viên tại một trường đại học

2

Đây là cách tôi làm cho nó hoạt động khi chạy byobu

Thêm dòng này vào .bash_login trước dòng "_byobu_source ..":

echo $DISPLAY > $HOME/.display.env

Và sau đó thêm dòng này vào .bashrc :

if [ ! -z ${SSH_CONNECTION+x} ]; then
  export DISPLAY=$(cat $HOME/.display.env) 
fi

1

Có vẻ như vấn đề là biến môi trường XAUTHORITY không được bảo tồn trong phiên màn hình. Tôi đã giải quyết điều này bằng cách thêm phần sau vào .bashrc của tôi. Tôi không nghĩ rằng điều này là cần thiết nhưng tôi đoán bạn làm những gì bạn phải:

# ensure X forwarding is setup correctly, even for screen
XAUTH=~/.Xauthority
if [[ ! -e "${XAUTH}" ]]; then
 # create new ~/.Xauthority file
 xauth
fi
if [[ -z "${XAUTHORITY}" ]]; then
 # export env var if not already available.
 export XAUTHORITY="${XAUTH}" 
fi

Tôi không hy vọng đây sẽ là giải pháp tốt nhất hoặc ngắn gọn nhất, nhưng nó hiệu quả.



0

Dựa trên đề xuất của @harre, tôi thấy đây là giải pháp hoạt động tốt nhất, ít nhất là cho RHEL thông qua Putty. Tôi biết có một cách tốt hơn là tạo một tệp chứa var, nhưng cách này hoạt động ngoài cổng X11để có quyền truy cập DISPLAYkhi được tải qua gnu screen.

Giải pháp tự động

Thêm vào .bashrc(hoặc .bash_profile, tùy thuộc vào trường hợp sử dụng của bạn)

#.bashrc
if [ -f ~/etc/.bash-screen-x11 ]; then
   echo $DISPLAY > $HOME/.display.env
   source ~/etc/.bash-screen-x11
fi

Sau đó thêm tệp sau (hoặc lựa chọn đường dẫn của bạn)

#~/etc/.bash-screen-x11
# sets back display var.
if [ -z $STY ]; then
  export DISPLAY=$(cat $HOME/.display.env)
fi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.