Làm cách nào để chạy tập lệnh khi đăng nhập / đăng xuất Unity?


8

Tôi có hai tập lệnh - một để gắn kết một số thư mục qua SSHFS - và một để hủy kết nối.

Tôi muốn khởi chạy tập lệnh gắn kết khi màn hình Ubuntu mặc định của tôi được khởi chạy (sau khi tôi đăng nhập tại bảng điều khiển đồ họa) - và tập lệnh ngắt kết nối khi tôi "Đăng xuất ..." từ bánh xe ở phía trên bên phải của Máy tính để bàn.

Xin vui lòng ai đó có thể cho tôi biết làm thế nào để đạt được điều này? Các hook thuận tiện / tiêu chuẩn nhất để chạy các lệnh trên launch / exit trên máy tính để bàn là gì?


Tôi không mong đợi thời điểm là quan trọng. Vấn đề là tập lệnh đầu tiên được thực thi trong vòng một giây hoặc lâu hơn ... trước khi người dùng khởi chạy ứng dụng một cách tương tác. Khi đăng xuất, vấn đề là tập lệnh thứ hai được thực thi trước khi người khác đăng nhập vào bảng điều khiển.
aSteve

Tôi có quyền truy cập root. Cài đặt gói không có vấn đề. Nếu có thể, tôi chỉ muốn sử dụng các đặc quyền cấp người dùng - giả sử có một cách gọn gàng để làm điều đó. Kịch bản của tôi không cần root. Tôi đang tìm kiếm lời khuyên về cách tốt nhất để khởi tạo các tập lệnh của mình trên Unity start / stop ... Hầu hết trải nghiệm Linux / Unix của tôi là trong bối cảnh không phải GUI. Với XWindows cũ và trình quản lý cửa sổ vanilla, tôi có thể thực hiện điều này từ .xinitrc. Cách tốt nhất với máy tính để bàn Unity hiện đại, mặc định là gì?
aSteve

Tôi không muốn làm cho hành động đăng xuất phụ thuộc vào những gì được / không được gắn kết ... Tất cả được xử lý linh hoạt bởi các tập lệnh hiện có. Những gì tôi cần là một cách gọn gàng để thực thi tập lệnh đầu tiên khi đăng nhập và lần thứ hai khi đăng xuất cho phiên GUI trên bàn điều khiển. Tôi đã tìm thấy "Ứng dụng khởi động" - nhưng điều đó sẽ chỉ giải quyết được nửa đầu của vấn đề.
aSteve

Tôi không nghĩ rằng "ứng dụng đăng nhập" là chiến lược phù hợp cho cả hai tập lệnh. Tôi có hai tập lệnh ... một tập hợp mọi thứ cho phiên GUI của tôi; cái khác dọn dẹp sau một phiên GUI. Cả hai nên được chạy như người dùng giống như phiên GUI. Không yêu cầu bất kỳ đối số. Tôi cần tìm một cách thích hợp để khởi chạy các tập lệnh - vào đúng thời điểm, đó là tất cả. Không có giả định về những gì các kịch bản thực sự cần phải được cần thiết. Câu hỏi này là tất cả về cách móc các sự kiện trùng với đăng nhập và đăng xuất Unity.
aSteve

Câu trả lời:


9

Xem xét yêu cầu của bạn về việc điều hành một công việc khi bạn đăng nhập vào Unity và không cho các thông tin đăng nhập khác, một công việc phiên Upstart có vẻ hoàn hảo.

Bạn có thể đã nhận thấy nó: các quy trình mà bạn chạy sau khi đăng nhập GUI nằm trong initquy trình thứ hai . Đây initlà một init upstart thích hợp và bạn có thể bắt đầu và dừng các công việc phiên dựa trên các sự kiện do nó phát ra. Không có quyền root cần thiết ở tất cả. Tốt hơn nữa (hoặc tệ hơn tùy thuộc vào quan điểm), điều này vẫn chưa được hỗ trợ hoàn toàn cho các hệ thống không đầu. Đăng nhập SSH đã không bắt đầu init người dùng từ một thử nghiệm nhanh mà tôi vừa thực hiện.

Để tạo một công việc phiên, tạo một .conftệp mới trong ~/.config/upstart. Đó là thư mục chính mặc định cho các công việc phiên khởi động ( $XDG_CONFIG_HOME/upstart), tạo thư mục đó nếu không tồn tại. Đây là một công việc ví dụ:

tee ~/.config/upstart/myjob.conf <<EOF
description "My job"
start on desktop-start
stop on desktop-end

script 
       firefox 'http://upstart.ubuntu.com/cookbook/#session-job'
end script
EOF

Bạn có thể tự điều khiển nó:

start myjob 
# or
initctl start myjob

Các servicelệnh được sử dụng để kiểm soát việc làm hệ thống (những người trong /etc/init.dhoặc /etc/init). Để kiểm soát các công việc phiên, người ta cần sử dụng initctllệnh, được sử dụng để tương tác với Upstart.

Xem man upstart-eventsđể biết thêm sự kiện bạn có thể sử dụng.


Tôi đã không nhận thấy ... nhưng ... tôi đồng ý - một công việc phiên mới bắt đầu có vẻ hoàn hảo. Có lẽ tôi đang thiếu một cái gì đó rõ ràng ... nhưng đã tạo ~ / .config / upstart / myjob.conf (như trên) khi tôi thực hiện "dịch vụ myjob start" Tôi nhận được "myjob: dịch vụ không được nhận dạng" Có ý tưởng nào không?
aSteve

Giải quyết nó: Tôi cần sử dụng "start myjob" thay vì "dịch vụ myjob start". Một lệnh hữu ích khác là "danh sách initctl"
aSteve

@aSteve xin lỗi về điều đó. Tôi đã sửa nó,
muru

Không vấn đề gì. Cách tiếp cận mới bắt đầu / phiên chắc chắn có vẻ đúng. Điều đó nói rằng, tôi chưa xác định cách tốt nhất để sử dụng nó để thực thi các tập lệnh bắt đầu và dừng riêng biệt (tồn tại ngắn). Tôi có thể sử dụng chỉ 1 tệp .cs hay tôi cần 2? Nó nên là một "dịch vụ" hay "nhiệm vụ"? Tôi có nên sử dụng pre / post start và pre / post stop không? Tôi không cần / muốn một quá trình chạy giữa bắt đầu và dừng ... trừ khi, tôi đoán, có một cách dễ dàng để đặt một biểu tượng trên thanh công cụ ... mặc dù điều đó, có lẽ, quá mức - cho mục đích của tôi.
aSteve

1
Cuối cùng. Sau nhiều lần hack ... Tôi đã phát hiện ra rằng tôi cần myendtask bị sa thải "vào cuối phiên", chứ không phải "trên đầu máy tính để bàn". Điều này hơi phản trực giác, nhưng nó hoạt động. (Cuối cùng!)
aSteve

1

Giải pháp là sử dụng các nhiệm vụ mới nhất. Tôi yêu cầu hai tác vụ - một tác vụ được kích hoạt khi máy tính để bàn khởi tạo cho người dùng; lần thứ hai khi phiên người dùng hết hạn. Hai tập lệnh sau hoạt động với tôi trong Ubuntu 14.04.

Trong ~ / .config / upstart / desktopOpen.conf

description "Desktop Open Task"
start on desktop-start
task
script
# Commands to mount sshfs go here as shell-script.
end script

Trong ~ / .config / upstart / desktopClose.conf

description "Desktop Close Task"
start on session-end
task
script
# Commands to unmount sshfs go here as shell-script.
end script

Các ngón tay của tôi đều cho rằng những sự kiện này sẽ tiếp tục đáp ứng các yêu cầu trong các bản phát hành Ubuntu trong tương lai. Tôi nghĩ rằng nó đáng để đăng giải pháp của tôi ở đây - trong trường hợp nó được sử dụng cho người khác.


-1

Dưới đây là một số gợi ý để chạy tập lệnh sau khi đăng nhập:

Tập lệnh StackOverflow Linux sau khi khởi động : Ghi chú Cliff là đặt tệp * .sh của bạn vào /etc/profile.d.

Nếu bạn muốn chạy tập lệnh khi khởi động, đây là một số gợi ý cho điều đó:

Tập lệnh StackOverflow Linux sau khi khởi động : Ghi chú Cliff là sử dụng /etc/rc.local hoặc crontab.


1
Cả hai tùy chọn này đều trông "đúng". Tôi chỉ muốn thực thi tập lệnh khi tôi đăng nhập / tắt theo nghĩa bắt đầu / kết thúc một phiên thống nhất. Tôi không muốn chạy tập lệnh của mình mỗi khi có đăng nhập mới. Đăng nhập mới có thể được bắt đầu từ xa qua ssh, v.v. - nhưng tôi không muốn chúng thực thi tập lệnh vì chúng không khởi tạo phiên Unity mới (trên bảng điều khiển).
aSteve
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.