web-dev-qa-db-ja.com

ユーザーを特定のデスクトップ環境に制限するにはどうすればよいですか?

私は、Ubuntu Precise 12.04の多かれ少なかれ標準的なインストールを実行していますが、Unityデスクトップ環境で日常的なタスクを実行することに非常に満足しています。

ただし、プレイに関しては、LXDEの方がはるかに快適です(背景:現在の状態では、UnityはUnity 2DやLXDEなどよりもはるかに低いフレームレートを実現しています-既知のバグであり、作業中です)。

そのために、ゲーマーユーザープロファイルを作成し、LXDEデスクトップ環境のみを使用するように制限したいと考えています。

これをさらに詳しく説明すると、ブート後にログインするように求められた場合、ログイン画面にゲーマーユーザープロファイルのオプションとしてLXDEのみを表示し、標準ユーザープロファイルには使用するデスクトップ環境を選択するオプションが必要です。

役立つかもしれない洞察を事前に感謝します!

8
FuzzyQ

さて、LightDM(ログインマネージャ)を理解しているため、specificユーザーのデスクトップ環境を制限することはサポートされていないようです。それはすべてか無かの取引です。デフォルトでは、ユーザーがデスクトップ環境を選択すると、それがデフォルトのデスクトップ環境になります。次回ログインするとき、別のログインを選択しない限り、デフォルトにログインします。

ただし、ユーザーがこれを変更できないようにすることができます。このユーザーは引き続き別のデスクトップ環境を選択できますが、選択してもデフォルトは変更されません。あなたが人がそれを変えることを心配していないなら、これがこれを行う最も安全な方法であると信じています。あなたがしなければならないことは、.dmrcファイル(ホームディレクトリ、つまり/ home/userにある)を編集することだけです。これは、デフォルトのセッションが保存される場所です。そのファイルのSession変数を任意の値に変更します。つまり、ubuntuはデフォルトのUnity DE、ubuntu-2dはUnity 2D、LXDEはLXDEです。別のDEでログインしてもこれが変更されないようにするには、単に不変(変更不可)にすることができます。

Sudo chattr +i /home/user/.dmrc

これで、不変フラグを削除しない限り、誰もそのファイル(ルートおよびその他のプログラムを含む)を変更できなくなります。

Sudo chattr -i /home/user/.dmrc

このユーザーが別のDEでログインすることを絶対に望まない場合は、これを達成するための本当にハッキングな方法(つまり、ご自身の責任でこれを行う)を見つけました。私はちょっと退屈だったし、これは試して楽しいもののように思えた。 LightDMが見ることができるすべての異なるDEは、/usr/share/xsessionsとして.desktopファイルとして保持されます。参考までに、ログイン画面に表示したくないものはすべて削除できます(ただし、すべてのユーザーに対しては削除されます)。これらのいずれかを開くと、かなり簡単です。デスクトップ上のすべてのショートカットと同様に、これらは基本的なデスクトップランチャーファイルです。各行にはExec行が含まれており、ログイン画面でDEを選択すると実行されます(つまり、どのDEが起動されます)。これを利用して、ログインしているユーザーを確認します。ユーザーが制限ユーザーである場合、特定のDEを使用するように強制します。

まず、.desktop内の各/usr/share/xsessions/ファイルに対して、/usr/local/bin内にスクリプトを作成する必要があります。私の例では、Unity DEであるubuntu.desktopに対してこれを行う方法を示し、制限ユーザー(restricteduser)を使用するようにDEとしてLXDEを使用します。 LXDE.desktopを見ると、Execコマンドが/usr/bin/startlxdeであり、TryExecコマンドがないことがわかります。 ubuntu.desktopを開くと、Execコマンドがgnome-session --session=ubuntuであり、TryExecコマンドがunityであることがわかります。 TryExecコマンドは、そのように聞こえます。 Execコマンドを実行した後、TryExecコマンドを実行しようとしますが、失敗してもクラッシュしません。

.desktopファイルから取得したコマンドを使用して、スクリプトを作成できます。それらを/usr/share/binに入れます。 Exec用とTryExec用の2つを作成する必要があります。次のようなことをします。

ubuntude.sh

#!/bin/bash

if [ `/usr/bin/whoami` = "restricteduser" ] ; then
   /usr/bin/startlxde
else
   gnome-session --session=ubuntu
fi

ubuntudetry.sh

#!/bin/bash

if [ `/usr/bin/whoami` != "restricteduser" ] ; then
   unity
fi

ログインしているユーザーが制限付きユーザーであるかどうかをテストし、適切なDEを起動しています。次に、それらが実行可能であることを確認する必要があります。

Sudo chmod +x /usr/local/bin/ubuntude.sh
Sudo chmod +x /usr/local/bin/ubuntudetry.sh

ここで、実際のDEの代わりにスクリプトを呼び出すようにubuntu.desktopを変更する必要があります。ファイル内のExec行とTryExec行をコメント化し、次のように置き換えます。

Exec=/usr/local/bin/ubuntude.sh
TryExec=/usr/local/bin/ubuntudetry.sh

他のDEについてもこのプロセスを繰り返すだけです。 DEにTryExecがない場合は、LXDEがTryExecを使用しないため、detry.shスクリプトを作成する必要もありません。明らかにこれは少しハッキングであり、編集する前にファイルをバックアップする必要がありますが、ユーザーが正しいDEにログインしていることを絶対に確認する必要がある場合は機能します。

4
reverendj1

debian SqueezeおよびWheezyでは、1行で.xsessionrcを追加することもできます

sTARTUP = XXXをエクスポート

(XXXは強制セッションスクリプトです。上記のExec-Lineを参照してください)ユーザーのホームディレクトリで、ユーザーが選択した内容に関係なく特定のセッションタイプを強制します。

Ubuntuでも動作するはずです。

(/etc/X11/Xsession.d/40x11-common_xsessionrcおよび50x11-common_determine-startupを見て、これが機能する理由を確認してください)

1
Peter

Reverendj1からの答えは私のために働いていませんでした。理由は、Exec =で指定した値が直接実行されず、引数として/ etc/X11/Xsessionに渡されるためです。 (ソース: https://askubuntu.com/a/857420/873016

問題の別の解決策:
1。すべての/usr/share/xsessions/.desktopファイルをバックアップします
2。すべての/usr/share/xsessions/
.desktopファイルを削除します
3。 /usr/share/xsessions/default.desktopのみを作成します

[Desktop Entry]
Name=Default
Comment=This session is the default session. It will look up the user specific desktop session in ~/.xsession.
Exec=default

「デフォルト」はXsessionの重要なWordであり、ユーザーのディレクトリで特定のセッションを検索します。
4。すべてのユーザー名に対して/home/{username}/.xsessionファイルを作成します。 「キオスクのような」アプリの場合、これは次のようになります。

#!/bin/bash

cd /home/{yourUsername}/ && ./startApplication.py
logout

たとえば別のユーザーが本格的なデスクトップマネージャーを起動できるようにする必要があります。次のようになります。

#!/bin/bash

exec icewm-session
  1. 〜/ .xsessionファイルが実行可能であることを確認してください
Sudo chmod +x ~/.xsession

Lightdmを使用してubuntu 16.04でテスト済み

0
egodigitus