Làm cách nào để thay đổi Gsinstall thông qua shell từ xa?


23

Tôi cần tự động hóa cấu hình máy tính để bàn thông qua Puppet, thiết bị đầu cuối ảo hoặc ssh.

Thật không may, việc gọi gsettingsqua ssh hoặc thiết bị đầu cuối ảo cho:

gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize "4"

(process:29520): dconf-WARNING **: failed to commit changes to dconf: Cannot autolaunch D-Bus without X11 $DISPLAY

Khi tôi đặt $DISPLAYvới export DISPLAY=:0.0nó sẽ báo lỗi khác:

(process:29862): dconf-WARNING **: failed to commit changes to dconf: Could not connect: Connection refused

Tôi có thể làm gì?


Trên Ubuntu 18.04, bạn có thể cần phải thiết lập không chỉ DBUS_SESSION_BUS_ADDRESS, mà còn XDG_RUNTIME_DIR.
mejem

Câu trả lời:


23

Điều quan trọng là đặt DBUS_SESSION_BUS_ADDRESSbiến môi trường.

Trong chủ đề này, tôi tìm thấy đoạn script sau, giúp lấy giá trị chính xác của biến đó. Nó yêu cầu tên của quá trình, đang chạy trên máy tính để bàn, trên đó chúng tôi muốn thay đổi cài đặt dbus. (Có thể có nhiều hơn 1 phiên chạy đồ họa song song). Hãy gọi nódiscover_session_bus_address.sh

#!/bin/bash

# Remember to run this script using the command "source ./filename.sh"

# Search these processes for the session variable 
# (they are run as the current user and have the DBUS session variable set)
compatiblePrograms=( nautilus kdeinit kded4 pulseaudio trackerd )

# Attempt to get a program pid
for index in ${compatiblePrograms[@]}; do
    PID=$(pidof -s ${index})
    if [[ "${PID}" != "" ]]; then
        break
    fi
done
if [[ "${PID}" == "" ]]; then
    echo "Could not detect active login session"
    return 1
fi

QUERY_ENVIRON="$(tr '\0' '\n' < /proc/${PID}/environ | grep "DBUS_SESSION_BUS_ADDRESS" | cut -d "=" -f 2-)"
if [[ "${QUERY_ENVIRON}" != "" ]]; then
    export DBUS_SESSION_BUS_ADDRESS="${QUERY_ENVIRON}"
    echo "Connected to session:"
    echo "DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS}"
else
    echo "Could not find dbus session ID in user environment."
    return 1
fi

return 0

Với tập lệnh này, chúng tôi có thể thực hiện các thao tác sau, giả sử unityquy trình đó đang chạy trên máy tính để bàn, trên đó chúng tôi muốn áp dụng các cài đặt của mình:

. ./discover_session_bus_address.sh unity
gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize "4"

Và mọi thứ sẽ hoạt động tốt.


Điều này làm việc ngay lập tức cho tôi!
sancho.s Tái lập lại

4

Tôi đã gặp vấn đề tương tự trong khi cố gắng thực hiện thay đổi cài đặt gs cho hình ảnh mơ hồ thông qua SSH trong khi cung cấp.

Giải pháp này https://askubfox.com/a/326773 đã thực hiện một mẹo nhỏ cho tôi với tất cả các hoạt động khai thác để kết nối hoạt động và cố gắng giả mạo môi trường. YMMV ...


-1

Tôi có một tập lệnh POST-Install đặt bộ cài đặt của tôi. Bởi vì tôi chạy tập lệnh dưới dạng sudo, EUID là 0, do đó tôi phải tìm $ RUID (ID người dùng thực).

đây là cách tiếp cận của tôi:

#!/usr/bin/env bash
# Get the Real Username
RUID=$(who | awk 'FNR == 1 {print $1}')

# Translate Real Username to Real User ID
RUSER_UID=$(id -u ${RUID})

# Set gsettings for the Real User
sudo -u ${RUID} DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/${RUSER_UID}/bus" gsettings set org.gnome.desktop.interface clock-show-date false

exit

ID người dùng của bạn đã được lưu trữ trong $USERbiến môi trường và UID của bạn trong $UIDbiến đó. Khi chạy sudo, chúng nằm trong $SUDO_USER$SUDO_UIDcác biến. Điều đó nói rằng, tại sao bạn thậm chí sẽ chạy nó với sudoở nơi đầu tiên? Sử dụng sudo -u $YOUR_USERcũng giống như không sử dụng sudo. Cuối cùng, who | awk . . .lệnh của bạn không nhận được ID của bạn , nó sẽ in tất cả ID của tất cả người dùng hiện đang đăng nhập vào hệ thống.
terdon
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.