Điểm:1

Lubfox 20.04 Chạy tập lệnh khi đăng nhập thực thi trong cửa sổ đầu cuối

lá cờ mx

Mục tiêu của tôi: Thực thi tập lệnh shell sau khi đăng nhập, tập lệnh này chạy với quyền root và lấy thông tin đầu vào thích hợp của người dùng từ cửa sổ đầu cuối để xác định hành động tiếp theo của nó.

Kịch bản: Tập lệnh tôi đang chạy cho người dùng biết rằng tập lệnh thứ hai sẽ tự động được bắt đầu sau 60 giây trừ khi người dùng nhập s hoặc S. Đồng hồ đếm ngược hiển thị thời gian còn lại. Nếu người dùng nhập đúng lệnh thoát, tập lệnh sẽ kết thúc và hệ thống sẽ tiếp tục như bình thường. Nếu không có gì hợp lệ được nhập trong 60 giây, thì tập lệnh thứ hai sẽ được bắt đầu. Tập lệnh thứ hai cũng cần được thực thi với quyền root (do đó tại sao tập lệnh đầu tiên phải được khởi tạo với quyền root), vì nó có một cơ quan giám sát thực thi khởi động lại hệ thống trong trường hợp có lỗi phần cứng.

Tập lệnh Bash:

#!/bin/bash

#Prompt người dùng với thông tin.

echo "Công cụ khai thác sẽ bắt đầu sau 60 giây."
echo "Nhấn s + enter để dừng quá trình và tiếp tục hoạt động bình thường."

#khai báo biến.

đầu vào = "a"
đặt giây = 60

#Đang chờ đầu vào của người dùng và đếm ngược.

trong khi [ $seconds -gt 0 ]; làm
    printf "\r........."$giây
    đọc -s -t 1 đầu vào
    để "giây-=1"
    nếu [ "$input" = "s" ] || [ "$input" = "S" ]; sau đó
        nghỉ
    fi
xong

tiếng vang

#Bắt đầu lựa chọn người dùng

nếu [ "$input" = "s" ] || [ "$input" = "S" ]; sau đó
    echo "Tiếp tục hoạt động bình thường."
    ngủ 2
khác
    echo "Bắt đầu khai thác."
    ngủ 2
    ./TeamRedMiner_Config.sh
fi

Mục đích: Tập lệnh này nhằm khởi động lại chương trình khai thác sau khi cơ quan giám sát khởi động lại hệ thống trong trường hợp xảy ra lỗi GPU. Lời nhắc người dùng cho tôi thời gian để ngăn công cụ khai thác thực thi sau khi đăng nhập nếu tôi muốn sử dụng hệ thống như bình thường. Tôi thường ở xa hệ thống, vì vậy điều này khá quan trọng để duy trì hoạt động khai thác. Lỗi GPU khá phổ biến sau khi chạy hơn 2 ngày (mặc dù ép xung, undervolt, v.v.) đối với một trong các thẻ của tôi vì lúc này thẻ này đã rất cũ (hơn 6 năm).

Tôi đã thực hiện rất nhiều nghiên cứu và vẫn chưa tìm ra giải pháp phù hợp với mình. Hầu hết tập trung vào việc thực thi tập lệnh không yêu cầu đầu vào bên ngoài hoặc cửa sổ đầu cuối. Nếu có, thì đó chỉ là một vài lệnh. Tôi cần thứ gì đó khởi chạy cửa sổ đầu cuối để tôi có thể xem lời nhắc và đếm ngược. Ngoài ra, tôi cần cửa sổ đầu cuối để hiển thị trạng thái công cụ khai thác sau khi nó khởi chạy.

Những gì tôi đã thử:
Điều kiện ban đầu: Tệp là .sh, có thể thực thi được và được sở hữu bởi root.

  1. Sử dụng systemd để thực thi tập lệnh dưới dạng tệp .service (không có gì xảy ra)
  2. Sử dụng crontab để thực thi tập lệnh khi khởi động (không có gì xảy ra)
  3. Đặt tập lệnh vào hồ sơ.d (Lubuntu mất nhiều thời gian hơn để đăng nhập, mặc dù không có gì xảy ra)
  4. chỉnh sửa $HOME/.bashrc$HOME/.profile tập tin bằng cách thêm ./AutoStartMiner.sh lên đầu các tệp (dẫn đến hệ thống bị treo)

Hy vọng điều này cho thấy tôi đã nỗ lực rất nhiều và chúng ta có thể tìm ra giải pháp cho vấn đề này. Cảm ơn!

sudodus avatar
lá cờ jp
1. `sudo crontab -e` là cách để nhập một công việc định kỳ cho root. Nhưng tôi không biết làm thế nào để tương tác với người dùng; Bạn cần có một đường dẫn đầy đủ đến tất cả các chương trình (hoặc chỉ định biến PATH trong rontab; 2. Bạn có thể sử dụng **autostart** để thay thế.[Ví dụ này](https://askubuntu.com/questions/1251814/xrandr-command-in-startup-script-has-no-effect-but-script-does-run-and-command/1251882#1251882) có thể giúp bạn tạo công việc tự khởi động. Tôi nghĩ bạn nên cho phép người dùng có thời gian nhập mật khẩu [người dùng] để tác vụ sudo hoạt động, vì tập lệnh có thể sẽ (và nên) yêu cầu mật khẩu.
XXX_BlueFire_XXX avatar
lá cờ mx
Tôi thực sự muốn bỏ qua mục nhập mật khẩu trong trường hợp này vì tôi có thể không ở phía trước hệ thống khi tập lệnh được thực thi. Về cơ bản, nó khởi động lại công cụ khai thác sau khi hệ thống gặp lỗi nghiêm trọng. Trong trường hợp tôi đang ở phía trước hệ thống và có ý định không khởi động công cụ khai thác, tôi muốn cửa sổ đầu cuối xuất hiện và hiển thị một tùy chọn để dừng tự động bắt đầu tập lệnh. Tôi đã nghĩ về việc sử dụng tính năng tự động khởi động LXQT; tuy nhiên, tôi có ấn tượng rằng nó không chạy dưới dạng tập lệnh với quyền root, điều này rất quan trọng trong tình huống này.
sudodus avatar
lá cờ jp
Nếu không ai có thể lợi dụng lỗ hổng bảo mật, bạn có thể 1. sử dụng `sudo -S` và thậm chí nhập mật khẩu ở dạng văn bản rõ ràng trong shellscript. Nhưng đó là một ý tưởng tồi; 2. Tốt hơn là sử dụng `visudo` và chỉ cho phép một chương trình hoặc tập lệnh cụ thể được thực thi bằng sudo mà không cần mật khẩu. Xem [liên kết này](https://www.computerhope.com/unix/visudo.htm). Bạn có thể tìm thấy nhiều hướng dẫn khác nếu bạn tìm kiếm `visudo` trên internet hoặc một số chuỗi tìm kiếm có liên quan khác.
XXX_BlueFire_XXX avatar
lá cờ mx
Bảo mật trên máy này không phải là vấn đề đáng lo ngại; tuy nhiên, cá nhân tôi muốn giữ mọi thứ an toàn nhất có thể trong khi hoàn thành mục tiêu. Tôi sẽ xem xét visudo như một cách để chạy tập lệnh shell với quyền root mà không cần mật khẩu. Đây là một bước tốt; tuy nhiên, tôi vẫn chưa biết chính xác làm cách nào để hệ thống chạy tập lệnh sau khi đến màn hình GUI.
sudodus avatar
lá cờ jp
Xem thêm [liên kết AskUbfox này](https://askubuntu.com/questions/246455/how-to-give-nopasswd-access-to-multiple-commands-via-sudoers), có thể phù hợp hơn với trường hợp của bạn.
sudodus avatar
lá cờ jp
Xem liên kết trong bình luận đầu tiên của tôi. Tự động khởi động hoạt động theo cách đó đối với tôi trong Lubfox 20.04.x.
XXX_BlueFire_XXX avatar
lá cờ mx
Sẽ làm được, tôi sẽ cho bạn biết nó tiến triển như thế nào bằng cách sử dụng phương pháp Tự động khởi động. Có lẽ nó đã thay đổi trong các phiên bản sau của Lubuntu.
sudodus avatar
lá cờ jp
Nhận xét về "Tập lệnh thứ hai cũng cần được thực thi với quyền root (do đó tại sao tập lệnh đầu tiên phải được khởi tạo với quyền root), vì nó có một cơ quan giám sát thực thi khởi động lại hệ thống trong trường hợp có lỗi phần cứng.": Tôi đề nghị bạn không chạy toàn bộ tập lệnh với tư cách là người chủ, nhưng **chỉ bộ giám sát** (được gọi cụ thể bằng `sudo` trong tập lệnh thứ hai. Điều này có nghĩa là bạn nên cho phép thực thi với `NOPASSWD` của cơ quan giám sát (được đặt qua ` visudo`).
Điểm:1
lá cờ jp

Hệ thống tự khởi động nơi một phần chạy với quyền cao

Phương pháp sau đây sẽ phù hợp với bạn để có được một cái khiên bắt đầu tự động, khi máy tính của bạn khởi động. Vui lòng sửa đổi các tệp mẫu từ câu trả lời này để khớp với ID người dùng của bạn và tên của tệp chương trình giám sát.

Lưu ý: Tôi khuyên bạn không nên chạy toàn bộ tập lệnh dưới dạng nguồn gốc, nhưng chỉ cơ quan giám sát (được gọi cụ thể bằng Sudo trong tập lệnh thứ hai. Điều này có nghĩa là bạn nên cho phép thực thi với KHÔNG BẬT MÍ của cơ quan giám sát (được thiết lập thông qua visudo).

~/.config/autostart/shield.desktop

[Mục nhập máy tính để bàn]
Tên = lá chắn ở người thử nghiệm
Bình luận=Khiên chỉ để thử nghiệm
Exec=/home/tester/bin/shield
Thiết bị đầu cuối = sai
Loại=Ứng dụng
StartupNotify=true
X-GNOME-Autostart-enabled=true

Nhìn thấy liên kết này, mô tả cách làm cho chương trình tự động khởi động khi máy tính đến màn hình nền khi khởi động với Lubuntu 20.04.x ​​LTS.

./bin/khiên

#!/bin/bash 

xterm -display :0 -fullscreen -fa default -fs 16 -e bash -c \
'
tme=10 # thời gian gia hạn tính bằng giây trước khi bắt đầu khai thác

echo "Dừng lại? (s/q) "

trong khi [ "$tme" -gt "0" ]
làm
 tiếng vang -n "$tme"
 tme=$((tme-1))
 đọc -t1 -n1 ans
 nếu [ "$ans" == s ] || [ "$ans" == S ] \
 || [ "$ans" == q ] || [ "$ans" == Q ];sau đó
  tiếng vang " - máy tính là của bạn"
  ngủ 2
  lối ra
 fi
xong

echo " - tự động hành động, khai thác bắt đầu"
echo "$ sudo -H parted -ls # demo với chương trình cần sudo"
sudo -H chia tay -ls
trong khi đúng
làm
 tiếng vang -n "."
 đọc -t1 -n1 -s an2
 nếu [ "$an2" != "" ];thì
  tiếng vang " - khai thác đã dừng, máy tính là của bạn"
  ngủ 3
 lối ra
 fi
xong'
  • sudo nên gọi cơ quan giám sát của bạn thay vì chia tay
  • Bạn cũng có thể sửa đổi thời gian gia hạn tme từ 10 đến 60 (giây).

/etc/sudoers

#
# Tệp này PHẢI được chỉnh sửa bằng lệnh 'visudo' với quyền root.
#
# Vui lòng xem xét thêm nội dung địa phương vào /etc/sudoers.d/ thay vì
# trực tiếp sửa đổi tập tin này.
#
# Xem trang hướng dẫn để biết chi tiết về cách viết tệp sudoers.
#
Mặc định env_reset
Mặc định mail_badpass
Mặc định secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Đặc tả bí danh máy chủ

# Đặc tả bí danh người dùng

# Đặc tả bí danh Cmnd

# Đặc tả đặc quyền người dùng
gốc TẤT CẢ=(TẤT CẢ: TẤT CẢ) TẤT CẢ

# Thành viên của nhóm quản trị có thể có quyền root
%admin TẤT CẢ=(TẤT CẢ) TẤT CẢ

# Cho phép các thành viên của nhóm sudo thực hiện bất kỳ lệnh nào
%sudo TẤT CẢ=(TẤT CẢ: TẤT CẢ) TẤT CẢ

# Xem sudoers(5) để biết thêm thông tin về chỉ thị "#include":

#includedir /etc/sudoers.d

%tester ALL=NOPASSWD: /usr/sbin/parted

Dòng cuối cùng (và một dòng trống) được thêm vào tệp mặc định. Vui lòng sửa đổi nó cho ID người dùng của bạn và tên của chương trình giám sát của bạn.

Các liên kết sau đây giải thích cách chỉnh sửa sudoerstập tin với visudo:

Quyền và quyền sở hữu

-rwxrwxr-x tester/tester 649 2021-07-26 15:14 ./bin/shield
-rwxrwxr-x tester/tester 181 2021-07-26 14:47 ./.config/autostart/shield.desktop
-r--r----- root/root 795 2021-07-26 14:19 vv/sudoers

Điều này làm việc cho tôi khi tôi thử nghiệm. Bạn có thể muốn sửa đổi quyền và quyền sở hữu. Nhưng nó không nên mạo hiểm khi bạn giới hạn KHÔNG BẬT MÍ tính năng cho chương trình watchdog.

Các cái khiên là toàn màn hình và trông như thế này

Khi bạn làm gián đoạn nó trong thời gian gia hạn trước khi khai thác:

nhập mô tả hình ảnh ở đây

Khi bạn để nó bắt đầu khai thác, hãy mô phỏng ở đây với chia tay và dấu chấm (.....), và cuối cùng dừng khai thác để sử dụng máy tính cho các mục đích khác:

nhập mô tả hình ảnh ở đây

Bạn có thể muốn sửa đổi kích thước văn bản của xterm cửa sổ từ -fs 16.

XXX_BlueFire_XXX avatar
lá cờ mx
Xin chào sudodus, cảm ơn vì đã dành thời gian trả lời câu hỏi một cách thấu đáo. Trong thời gian rảnh rỗi, tôi đã tìm ra một giải pháp khác mà tôi sẽ đăng bên dưới khi có thời gian. Ngoài ra, tôi rất muốn thử giải pháp của bạn trên một máy khác để tôi có thể học hỏi. Cảm ơn!
sudodus avatar
lá cờ jp
Bạn được chào đón và tôi đang mong đợi giải pháp của bạn :-)
Điểm:1
lá cờ mx

Được rồi, đã lâu rồi, mặc dù cuối cùng tôi cũng có thời gian để ngồi xuống và viết ra giải pháp của mình. Đây là lần đầu tiên tôi viết một kịch bản bash nên nó rất thú vị.

Cuối cùng, tôi đã sử dụng kết hợp 3 tập lệnh, 2 trong số đó được cấp quyền root trong tệp sudoers. Có lẽ có một cách tốt hơn để làm điều này; tuy nhiên, tôi chỉ cần đặt đường dẫn đầy đủ tới tập lệnh.

sudo visudo

Sau đó, dưới tab #includedir /etc/sudoers.d

Tên người dùng ALL=NOPASSWD PATH/AutoStartMiner.sh, PATH/TeamRedMiner_Config.sh, Đường dẫn/teamredminer

Điều này sẽ tạo tiền đề cho 3 tập lệnh lần lượt hoạt động mà không gặp sự cố.

Để bắt đầu khởi động AutoStartMiner.sh trong cửa sổ terminal, tôi đã sử dụng trình giả lập gnome-terminal. Đối với những người triển khai một cái gì đó tương tự, bạn sẽ cần cài đặt trình giả lập qua:

Sudo apt cài đặt gnome-terminal

Sau đó, tôi đã sử dụng trung tâm cấu hình LXQT và điều hướng đến cài đặt phiên. Trong cài đặt phiên, tôi đặt tập lệnh StartTerminalASM.sh để thực thi sau khi khay hệ thống được tải. Điều này được thực hiện bằng cách nhấn thêm, đặt tên cho chức năng tự khởi động, dán toàn bộ đường dẫn tới tập lệnh, bao gồm cả tập lệnh, rồi nhấp vào hộp có nội dung tải sau khay hệ thống. Điều quan trọng cần lưu ý là tập lệnh đầu tiên này không cần chạy với các đặc quyền nâng cao, vì vậy phương pháp này hoạt động. Chức năng tự khởi động của LXQT không tự động chạy các tập lệnh yêu cầu đặc quyền nâng cao.

Đây là nội dung của tập lệnh đầu tiên: StartTerminalASM.sh

#!/bin/bash
gnome-terminal --command="bash -c 'sudo /home/userName/Scripts/AutoStartMiner.sh; $SHELL'"

Tập lệnh này chỉ cần khởi động AutoStartMiner.sh trong thiết bị đầu cuối gnome. Vì chúng tôi đã thêm tập lệnh này vào tệp sudoers trước đó, nên lệnh sudo sẽ thực thi mà không cần nhắc mật khẩu.

Đây là tập lệnh thứ hai: AutoStartMiner.sh

#!/bin/bash
# Nhắc người dùng với thông tin.
echo "Công cụ khai thác sẽ bắt đầu sau 60 giây."
echo "Nhấn s + enter để dừng quá trình và tiếp tục hoạt động bình thường."
# Xóa biến.
đầu vào = "a"
đặt giây = 60
#Đang chờ đầu vào của người dùng và đếm ngược.
trong khi [ $seconds -gt 0 ]; làm
  printf "\r........."$giây
    đọc -s -t 1 đầu vào
    để "giây-=1"
    nếu [ "$input" = "s" ] || [ "$input" = "S" ]; sau đó
        nghỉ
    fi
xong
tiếng vang
#Bắt đầu lựa chọn người dùng
nếu [ "$input" = "s" ] || [ "$input" = "S" ]; sau đó
    echo "Tiếp tục hoạt động bình thường."
    ngủ 2
khác
    echo "Bắt đầu khai thác."
    ngủ 2
    sudo /home/userName/Documents/Crypto/Miners/TeamRedMiner/teamredminer-v0.8.4-linux/TeamRedMiner_Config.sh
fi

Vì vậy, điều này về cơ bản giống như tôi đã mô tả trong câu hỏi ban đầu. Vấn đề duy nhất là khi thời gian giảm xuống dưới 10 giây, vì lý do nào đó, số 0 xuất hiện ở vị trí 1 và các số đếm ngược ở vị trí 10 (ví dụ: 10, 90, 80, 70, ..., v.v. ). Có lẽ một cái gì đó tôi không hiểu đầy đủ về bản inf tuyên bố mà tôi đã thực hiện. Tương tự như trên, các sudo lệnh ở đây không yêu cầu mật khẩu do dòng được tạo trong sudoers.

Cuối cùng, nó thực thi tập lệnh thứ ba: TeamRedMiner_Config.sh

Tập lệnh này chỉ đơn giản là thiết lập các tham số để công cụ khai thác chạy. Nó cũng thực thi công cụ khai thác với sudo, đó là lý do tại sao chúng tôi thêm lệnh thứ ba vào sudoers để đảm bảo không cần nhắc để tự khởi động công cụ khai thác.

Vì vậy, trừ khi người dùng nhắc hệ thống dừng để công cụ khai thác bắt đầu, công cụ khai thác sẽ thực thi mà không cần bất kỳ đầu vào nào. Điều này cực kỳ hữu ích vì nó giúp tôi đỡ phải đau đầu nếu kernel xảy ra sự cố. Tôi chỉ cần nhấn nút nguồn và bùng nổ, công cụ khai thác sẽ chạy sau một phút. Nếu tôi thực sự muốn tự động hóa nó, tôi có thể tạo một servo nhỏ để nhấn nút hoặc thiết lập đánh thức trên lan.

Đó là tất cả những gì đang được nói, đó là vấn đề mới nhất. Sau khi cập nhật lên Linux kernel 5.11.0-27-generic, bộ điều hợp không dây của tôi từ chối kết nối với mạng của tôi, mặc dù ít nhất nó đã được hệ thống nhận ra.

Cảm ơn mọi người đã đóng góp ý kiến ​​và tôi hy vọng một ngày nào đó điều này sẽ giúp ích cho những người mới bắt đầu như tôi.

tripleee avatar
lá cờ nz
Chạy tập lệnh trong cửa sổ đầu cuối có vẻ như là một thiết kế kém. Nếu bạn muốn một cái gì đó chạy đồng thời, hãy bắt đầu nó dưới dạng công việc nền với đầu ra thành tệp nhật ký và đính kèm vào tệp nhật ký đó từ bất cứ nơi nào bạn tình cờ đăng nhập để xem nó đang làm gì.
XXX_BlueFire_XXX avatar
lá cờ mx
Cửa sổ đầu cuối là để cho phép người dùng nhập liệu. Đó hiện là cách duy nhất tôi biết cách cho phép người dùng tương tác với tập lệnh. Mặc dù nếu có một cách khác, tôi chắc chắn sẵn sàng học hỏi.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.