Đặt các biến môi trường cho gnome trên wayland và bash trên các thiết bị đầu cuối ảo (hoặc ssh)


13

Gnome 3.22 sử dụng wayland theo mặc định. Gnome trên wayland không đọc ~/.profile(hoặc ~/.bash_profilehoặc /etc/profile). Xem https://ormszilla.gnome.org/show_orms.cgi?id=736660 .

Tôi có các tệp khởi tạo được thiết lập như sau:

  • .bash_profilekhông có gì ngoài nguồn .profile.bashrc
  • .profilechỉ đặt các biến môi trường như PATHLC_MESSAGES
  • .bashrcđặt một số cài đặt cụ thể bash và bí danh và biến môi trường cho các ứng dụng như lessgrep.

Hiệu ứng (trước wayland) là như sau:

  • khi tôi đăng nhập đồ họa .profileđã được đọc và các biến môi trường như PATHLC_MESSAGESđược đặt. Khi tôi mở bash bên trong một trình giả lập thiết bị đầu cuối thì nó .bashrcđã được đọc.
  • Khi tôi đăng nhập dưới một thiết bị đầu cuối ảo thì .bash_profileđược đọc lần lượt đọc .profile.bashrc.
  • Khi tôi đăng nhập bằng ssh thì hành vi tương tự như thiết bị đầu cuối ảo.

Trong mọi trường hợp .profile.bashrcđã được đọc và môi trường của tôi đã được thiết lập.

Vì vậy, bây giờ gnome 3.22 sử dụng wayland và wayland không đọc .profile. Làm cách nào tôi có thể thiết lập các tệp khởi tạo của mình để tôi lại có các hiệu ứng như được mô tả ở trên?

Lưu ý rằng tôi không nhấn mạnh rằng các tệp nhất định (như .profile) được đọc. Những gì tôi muốn là có môi trường của tôi được thiết lập một cách hợp lý. Điều đó có nghĩa là tôi muốn giữ các cài đặt cụ thể bash cho các tệp khởi tạo bash và các cài đặt khác cho các tệp khởi tạo khác. Ngoài ra tôi muốn không sao chép các cài đặt trên các tập tin khác nhau.

Tôi sử dụng linux linux. Câu trả lời cho tất cả các bản phân phối đều được chào đón. Khi đề xuất một cách giải quyết, xin vui lòng mô tả các tác dụng phụ và những lợi thế và bất lợi.


cập nhật tháng 11 năm 2017: theo như tôi hiểu, các nhà phát triển gnome đã thừa nhận rằng mọi người mong đợi các tệp cấu hình shell đăng nhập của họ ( .profile.bash_profiletrong trường hợp bash) có nguồn gốc sau khi đăng nhập. Bất kể đăng nhập văn bản hoặc đồ họa. vì vậy trường hợp sử dụng của tôi nêu ở trên hoạt động trở lại.

vẫn là các nhà phát triển gnome muốn tránh xa việc bắt đầu một shell đăng nhập. Dường như hướng đi của họ là sử dụng môi trường từ systemd:

https://in.waw.pl/~zbyszek/blog/en môid.html

có vẻ như sẽ mất một lúc cho đến khi tất cả các phương thức đăng nhập được điều chỉnh phù hợp với môi trường.

Câu trả lời:


7

Phiên bản Systemd 233 (tháng 3 năm 2017) đã thêm hỗ trợ để đặt các biến môi trường trong ~/.config/environment.d/*.conf. Xem các environment.dtrang man và các cuộc thảo luận đã dẫn đến tính năng trên PR sơ bộ nàymột trận chung kết này .


đây có vẻ là một giải pháp rất tốt tôi đã làm một bài kiểm tra nhanh nó hoạt động trong gnome wayland nhưng không hoạt động trong thiết bị đầu cuối ảo. tôi giả sử nó cũng sẽ không hoạt động cho ssh. tôi đã đọc trang người đàn ông nhưng chỉ đọc lướt qua các cuộc thảo luận. Bạn có biết liệu cái này cũng sẽ hoạt động trong các thiết bị đầu cuối ảo và ssh không?
lesmana

1
đây là một bản tóm tắt hay về tình huống: in.waw.pl/~zbyszek/blog/en môid.html . đoạn cuối nói rằng hỗ trợ cho thiết bị đầu cuối ảo (và ssh?) "có thể" đến. ít nhất là nếu tôi hiểu điều đó một cách chính xác.
lesmana

Thật thú vị, tôi đã không nhận ra rằng GDM phải thêm hỗ trợ đặc biệt cho việc này để làm cho nó hoạt động. Có thể đã có một sự sắp xếp nào đó trong đó tất cả các loại phiên là con của một quy trình dịch vụ người dùng, đã phân tích cú pháp các env này và tất cả chỉ hoạt động mà không cần GDM / sshd cần biết gì về nó?
Jack O'Connor

1
Điều này không phù hợp với tôi trên Fedora 30 với GDM / Wayland.
jonleighton

'Giải pháp' bỏ lỡ trường hợp sử dụng hợp lý: nếu A, sau đó đặt B. Như một ví dụ, nếu XDG_SESSION_TYPE = wayland thì đặt QT_QPA_PLATFORM = wayland.
vk5tu

5

Đây là cách giải quyết mà tôi sử dụng cho cùng một vấn đề:

Bước 1

Tạo một tập lệnh nguồn ~/.profilevà làm cho tập lệnh đó có thể thực thi được. Hãy gọi nó là /path/to/startup.sh. Nó có thể trông giống như thế này:

#!/bin/bash
. ~/.profile

Bước 2

Tạo một ứng dụng máy tính để bàn để chạy tập lệnh. Để làm điều này, bạn cần tạo một .desktoptệp và đặt nó vào ~/.local/share/applications(hoặc /usr/share/applicationsnếu bạn muốn nó hoạt động cho tất cả người dùng). Hãy gọi nó là ~/.local/share/applications/startup.desktop. Nó có thể trông giống như thế này:

[Desktop Entry]
Name=Startup
Keywords=startup
Exec=/path/to/startup.sh
Type=Application

Để biết thêm thông tin về .desktopcác tập tin xem tại đây .

Bước 3

Đăng xuất. Đăng nhập lại. Bây giờ bạn có thể tìm kiếm ứng dụng của mình trong menu ứng dụng.

Bước 4

Đặt ứng dụng này làm ứng dụng khởi động. Để làm điều này, tôi đã sử dụng Công cụ Tweak Gnome và thêm ứng dụng của mình vào danh sách trong tab Ứng dụng Khởi động.

Và đó là nó! Bây giờ bạn sẽ có lại chức năng cũ của mình bất cứ khi nào bạn đăng nhập. Nó cũng giữ nguyên cấu trúc tệp, vì vậy, khi lỗi trong Wayland được sửa, tất cả những gì bạn cần làm là xóa ứng dụng khỏi danh sách ứng dụng khởi động, xóa hai tệp và mọi thứ trở lại bình thường.

Chỉnh sửa sau

Như @Guss chỉ ra trong các bình luận, cách giải quyết này sẽ không xuất các biến môi trường vì startup.shđược chạy trong lớp vỏ của chính nó. Vì vậy, chúng tôi cần một cách giải quyết khác cho những người.

Đọc từ tài liệu Gnome bạn có thể thấy rằng có một vài lựa chọn thay thế. Điều duy nhất tôi có thể làm việc là tạo một tệp trong /usr/share/gdm/env.d/và, trong tệp đó, đặt các biến được xuất. Tuy nhiên, điều này có nghĩa là các biến sẽ được xuất cho tất cả người dùng, vì vậy những gì tôi đã làm là:

Hãy nói rằng chúng tôi có hai người dùng, johnsally . Đối với mỗi người trong số họ tạo một tệp trong /usr/share/gdm/env.d/, hãy gọi cho họ startup_john.envstartup_sally.env. Trong các tệp đó, đặt các biến môi trường sẽ được xuất khi chúng bắt đầu phiên Gnome mới.

$ cat startup_john.env
VAR=1
$ cat startup_sally.env
VAR=2

Tại thời điểm này, vấn đề là cả hai tệp sẽ được tải cho cả người dùng. Để giải quyết vấn đề này, chúng tôi đặt quyền cho mỗi tệp sao cho chỉ chủ sở hữu của nó mới có thể đọc nội dung của nó.

$ ls -l startup_john.env
-rw-r-----. 1 john john 4 Dec 27 15:17 startup_john.env
$ ls -l startup_sally.env
-rw-r-----. 1 sally sally 4 Dec 27 15:16 startup_sally.env

Không phải là giải pháp tao nhã nhất, tôi đồng ý, nhưng, theo như tôi đã thử nghiệm, nó dường như hoàn thành công việc.


Tôi đã không kiểm tra điều này, nhưng nó không hoạt động vì startup.shnó đang chạy trong lớp vỏ của chính nó và sẽ không xuất các biến môi trường sang bối cảnh thực thi cha. Ví dụ, hãy thử chạy mã này trong trình bao của bạn : echo "a is $a"; (export a="B"); echo "a is $a" . Theo @Tudor, đầu ra từ tiếng vang thứ hai sẽ là a is B, điều này - bạn sẽ thấy khi bạn chạy mã - không phải là điều xảy ra.
Guss

Xin chào @Guss, bạn đã đúng. Tôi đã không nhận thấy điều đó, nhưng bây giờ bạn đã chỉ ra điều đó, tôi cũng đã tìm thấy một cách giải quyết cho các biến môi trường. Tôi sẽ cập nhật câu trả lời của tôi cho phù hợp.
Tudor Vișan

1
Xin vui lòng, tôi muốn xem những gì bạn nghĩ ra. Ngoài ra, tôi nghĩ rằng bạn rất lạc quan khi bạn nói "khi lỗi trong Wayland được sửa chữa" - đây không phải là lỗi trong Wayland mà là trong Gnome và mọi người không coi đây là lỗi - đó là hành vi được ghi lại: wiki .gnome.org / Sáng kiến ​​/ Wayland / Phiên khởi động
Guss
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.