Задать вопрос
AlexeyGold2077
@AlexeyGold2077
Интересуюсь Linux и программированием.

Как получить путь до рабочего стола пользователя Ubuntu?

Есть sh скрипт который должен создать 2 desktop файла на рабочем столе и разрешить их выполнение, попробовал этот код:
for user in /home/* #поиск домашнего каталога
do
	cp sources/update.desktop ${user}/Рабочий\ стол/
	chmod ugo+rwx ${user}/Рабочий\ стол/update.desktop
	cp sources/shutdown.desktop ${user}/Рабочий\ стол/
	chmod ugo+rwx ${user}/Рабочий\ стол/shutdown.desktop
done

но при выполнении создает 2 файла на рабочем столе но не дает права на выполнение и в консоли выводит это:
cp: невозможно создать обычный файл '/home/lost+found/Рабочий стол/': Это не каталог
chmod: невозможно получить доступ к '/home/lost+found/Рабочий стол/update.desktop': Нет такого файла или каталога
cp: невозможно создать обычный файл '/home/lost+found/Рабочий стол/': Это не каталог
chmod: невозможно получить доступ к '/home/lost+found/Рабочий стол/shutdown.desktop': Нет такого файла или каталога

если использовать $HOME то при выполнении от root выдает следующее:
cp: невозможно создать обычный файл '/root/Рабочий стол/': Это не каталог
chmod: невозможно получить доступ к '/root/Рабочий стол/update.desktop': Нет такого файла или каталога
cp: невозможно создать обычный файл '/root/Рабочий стол/': Это не каталог
chmod: невозможно получить доступ к '/root/Рабочий стол/shutdown.desktop': Нет такого файла или каталога
cp: невозможно создать обычный файл '/root/Рабочий стол/': Это не каталог
chmod: невозможно получить доступ к '/root/Рабочий стол/update.desktop': Нет такого файла или каталога
cp: невозможно создать обычный файл '/root/Рабочий стол/': Это не каталог
chmod: невозможно получить доступ к '/root/Рабочий стол/shutdown.desktop': Нет такого файла или каталога
  • Вопрос задан
  • 2841 просмотр
Подписаться 2 Простой 6 комментариев
Решения вопроса 1
sotvm
@sotvm
Умный поймёт, а дураку и так всё равно.
sudo find /  -maxdepth 3 -type d -name "Desktop" -o  -name "Рабочий стол"
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
xotkot
@xotkot
хорошо есть и хорошо весьма
for user in /home/* #поиск домашнего каталога

а с чего вы взяли что домашний каталог пользователя обязательно должен находится в /home ?
$ man useradd
...
-b, --base-dir BASE_DIR
The default base directory for the system if -d HOME_DIR is not specified. BASE_DIR is concatenated with the account name to define the home directory. If the -m option is not used, BASE_DIR must exist.

If this option is not specified, useradd will use the base directory specified by the HOME variable in /etc/default/useradd, or /home by default.


то есть, при сотворении пользователя его домашний каталог находится в домашнем БАЗОВОМ каталоге для пользователей который указывается либо через переменную --base-dir либо берётся из /etc/default/useradd (где он по умолчанию /home)

Как получить путь до рабочего стола пользователя Ubuntu?

если нужен путь до рабочего стола текущего пользователя то проще некуда:
systemd-path user-desktop
если для другого(не тока текущего) пользователя то можно так:
su - YOUR_USER -c "systemd-path user-desktop"
или лучше так:
runuser -l YOUR_USER -c "systemd-path user-desktop"


если нужно узнать имена всех несистемных пользователей, то
$ man useradd
...
UID_MAX (number), UID_MIN (number)
Range of user IDs used for the creation of regular users by useradd or newusers.

The default value for UID_MIN (resp. UID_MAX) is 1000 (resp. 60000).

но для верности можно глянуть в /etc/login.defs и оттуда узнать UID_MIN и UID_MAX
eval $(awk '/^UID_/{print $1"="$2}' /etc/login.defs)

ну а затем отфильтровать файл /etc/passwd по этим параметрам
awk -v MIN=$UID_MIN -v MAX=$UID_MAX -F: '$3>MIN && $3<MAX {print $1}' /etc/passwd

в итоге получим список несистемных пользователей на данной системе

Есть sh скрипт который должен создать 2 desktop файла на рабочем столе и разрешить их выполнение, попробовал этот код:

если нужно для текущего пользователя то проще простого:
DESKTOP=$(systemd-path user-desktop)
cp sources/update.desktop $DESKTOP && chmod ugo+rwx $DESKTOP/update.desktop
cp sources/shutdown.desktop $DESKTOP && chmod ugo+rwx $DESKTOP/shutdown.desktop

если для всех пользователей то просто закинуть нужные действия в функцию и запускать её от указанных пользователей в цикле
Ответ написан
Комментировать
Попробуйте так:

#!/bin/bash
for user in /home/*; do
   [ $user == /home/lost+found ] && continue

   d="$user/Desktop"
   if [ ! -d "$d" ]; then
      d="$user/Рабочий стол"
      [ -d "$d" ] || continue
   fi

   install -m777 sources/{update,shutdown}.desktop "$d"
done
Ответ написан
@Zerg89
users > list1
while [ -n "$list1" ]
do
set $list1
user=$1
shift
user="$*"
cp sources/update.desktop $user/Рабочий\ стол/
chmod ugo+rwx $user'/Рабочий\ стол/update.desktop'
cp sources/shutdown.desktop $user'/Рабочий\ стол/'
chmod ugo+rwx $user'/Рабочий\ стол/shutdown.desktop'
done
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы