Bối cảnh không thay đổi bằng gsinstall từ cron


11

Tôi đang cố gắng thay đổi hình nền của mình thành một hình ảnh ngẫu nhiên bằng cách sử dụng tập lệnh được đề xuất của Indrajith Indraprastham tại đây: Làm cách nào để thay đổi hình nền máy tính từ dòng lệnh trong Unity?

Khi tôi chạy tập lệnh từ cửa sổ đầu cuối, bg thay đổi tốt, nhưng khi nó chạy từ cron, tôi đã gửi lỗi này:

.

Tôi sẽ đánh giá cao bất kỳ lời đề nghị.


1
@Merri ngoài thực tế là các câu trả lời ở đó không giải quyết được vấn đề của OP (điều này sẽ không biến nó thành một bản sao), làm thế nào đây sẽ là một bản sao ???? Cùng một lỗi không có nghĩa là cùng một câu hỏi.
Jacob Vlijm

Câu trả lời:


16

Chỉnh sửa gsinstall từ cron; thiếu biến môi trường

Nếu bạn chạy tập lệnh từ môi trường của riêng bạn (ví dụ từ cửa sổ đầu cuối hoặc từ Ứng dụng khởi động), một số biến môi trường sẽ được đặt. crontuy nhiên chạy tập lệnh của bạn với một tập hợp các biến môi trường hạn chế.

Để chỉnh sửa gsettingsthành công từ cron, bạn cần đặt DBUS_SESSION_BUS_ADDRESSbiến môi trường. Bạn có thể làm điều đó bằng cách thêm hai dòng vào tập lệnh của bạn, như được mô tả ở đây (và bên dưới).

Tập lệnh của bạn, bao gồm thiết lập biến cần thiết

Tập lệnh từ đây , được chỉnh sửa để bao gồm DBUS_SESSION_BUS_ADDRESSbiến môi trường, sau đó trở thành:

#!/bin/bash

PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)

DIR="/home/indra/Pictures/wallpapers"
PIC=$(ls $DIR/* | shuf -n1)
gsettings set org.gnome.desktop.background picture-uri "file://$PIC"

Liên quan: Chạy .sh cứ sau 5 phút


@Shaun Chào mừng bạn! Vui mừng khi nó hoạt động :)
Jacob Vlijm

1
Tôi đang thử điều này với Cinnamon on Mint. Khi tôi chạy trực tiếp từ cli này, tôi nhận được "dconf-CẢNH BÁO *: không thực hiện được các thay đổi đối với dconf: Địa chỉ đã cho là trống". Nó được sử dụng để hoạt động trước (từ cli), không có PID và DBUS_SESSION_ . (Nhưng không phải từ cron)
donquixote

1
@donquixote Hãy thử PID=$(pgrep -f 'gnome-session' | head -n1)!
Jāni Elmeris

Bạn có thể thay thế DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)bằng $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ)Vì grep cũng có tên biến. nguồn
wjandrea

1
pgrep gnome-sessioncó thể trả lại nhiều hơn một pid nếu nhiều người dùng đăng nhập vào hệ thống (mỗi phiên gnome đang chạy). Có lẽ EUID=$(id --real --user)PID=$(pgrep --euid $EUID gnome-session)sẽ là một cách để chỉ có PID liên quan đến phiên gnome của người dùng hiện tại.
unutbu
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.