なぜこれがすべて必要なのですか?
Linux Mintは素晴らしいホームOSです。 あらゆる好み、インストール、初心者でも簡単で理解しやすいグラフィカル環境の幅広い選択、インストール後すぐに必要なソフトウェアの基本セット、便利なアプリケーションマネージャー、および基本的なマルチメディアコーデックが用意されています。 全体として、ナビゲートしてLinuxに慣れるのに最適なシステムです。
しかし、自宅にNASなどを持たない人には問題がありますが、DLNAをサポートする他のデバイスでPCのコンテンツを視聴したいのです。 Linuxでは、さまざまなDLNAサーバーがありますが、 MiniDLNAが最適です。 これにはいくつかの理由があります。 まず、これは典型的なUnixの方法です。このサーバーはDLNAサーバーであり、多くのホイッスルとの組み合わせではなく、コンテンツはどのデバイスでも簡単に認識されます。 AllShareを搭載したSamsung TVでも完全に接続されています。 また、このサーバーの驚くべき速度と要求の厳しいリソースに注目することもできます。
そして、すべてがうまくいくだろうが、ここでチームの助けを借りて
インストールすると動作しません-リポジトリにはありません。sudo apt-get install minidlna
この誤解を解消するためのさまざまなオプションがありますが、最も正しい方法はソースからインストールすることです。
新たに作成された可能性のあるLinuxoidをこの経路から追い払わず、おそらく誰かを助けるために、多くの情報があるため、落とし穴を回避する方法を書きますが、方法の初めに、人々はもっと簡単なことをする必要があります。
準備する
rootとして実行されているコンソールでコマンドを実行する場合、sudoを記述する必要はありません。
最初に、必要なライブラリをインストールする必要があります。
更新された:
そして、ライブラリ自体をインストールします。sudo apt-get update
sudo apt-get install libavcodec-dev libavformat-dev libavutil-dev libflac-dev libvorbis-dev libogg-dev libid3tag0-dev libexif-dev libjpeg-dev libsqlite3-dev
現在のMiniDLNAの最新バージョンは1.1.3 です。こちらからダウンロードするか、コンソールからダウンロードできます。
元の名前を保持するにはアドレスの前のキーが必要です。新しいバージョンのリリースでは、ファイル名が異なります。 その後、アーカイブを解凍する必要があります。wget --trust-server-names http://sourceforge.net/projects/minidlna/files/latest/download
展開されたソースフォルダーに移動しますtar -xf minidlna-1.1.3.tar.gz
cd minidlna-1.1.3
ファイルを含むフォルダーをデバイスにすぐに表示する場合は、コードをわずかに修正する必要があります。
ネタバレを開く
これが必要ない場合は、構成に直接進んでください。
ファイルを表示する方法の要求をオフにするには、ソースフォルダーのupnpsoap.cファイルを修正する必要があります(minidlna-1.1.3、既に存在している必要があります)が、最初にバックアップを作成します。
手順の開始時に、SOAP / XML要求が解析され、処理されて結果が返されます。 要求の解析は、デバッグメッセージの形成で終了します。
次に、root_container構成パラメーターに応じて、ルートコンテナーの選択が実装されます。
このブロックの直後、データベースへのクエリを含むブロックの前に、ビデオ、音楽、画像のフォルダーリダイレクトコードを追加します。
後続の更新の手順を簡素化するには、変更を含むパッチを保存します。
ファイルを編集する代わりに、パッチを適用するだけです:
エディターで開きますsudo cp upnpsoap.c upnpsoap.c.old
検索(F6)、手順を探します:sudo nano upnpsoap.c
"BrowseContentDirectory"static void BrowseContentDirectory(struct upnphttp * h, const char * action) {
手順の開始時に、SOAP / XML要求が解析され、処理されて結果が返されます。 要求の解析は、デバッグメッセージの形成で終了します。
DPRINTF(E_DEBUG, L_HTTP, "Browsing ContentDirectory:\n" " * ObjectID: %s\n" " * Count: %d\n" " * StartingIndex: %d\n" " * BrowseFlag: %s\n" " * Filter: %s\n" " * SortCriteria: %s\n", ObjectID, RequestedCount, StartingIndex, BrowseFlag, Filter, SortCriteria);
次に、root_container構成パラメーターに応じて、ルートコンテナーの選択が実装されます。
// if( strcmp(ObjectID, "0") == 0 ) { // args.flags |= FLAG_ROOT_CONTAINER; // if( runtime_vars.root_container ) { // // if( (args.flags & FLAG_AUDIO_ONLY) && (strcmp(runtime_vars.root_container, BROWSEDIR_ID) == 0) ) ObjectID = MUSIC_DIR_ID; else // , ObjectID = runtime_vars.root_container; } else // { // // if( args.flags & FLAG_AUDIO_ONLY ) ObjectID = MUSIC_ID; } }
このブロックの直後、データベースへのクエリを含むブロックの前に、ビデオ、音楽、画像のフォルダーリダイレクトコードを追加します。
//Redirect video to folder if( strcmp(ObjectID, VIDEO_ID) == 0 ) { ObjectID = VIDEO_DIR_ID; } //Redirect music to folder if( strcmp(ObjectID, MUSIC_ID) == 0 ) { ObjectID = MUSIC_DIR_ID; } //Redirect images to folder if( strcmp(ObjectID, IMAGE_ID) == 0 ) { ObjectID = IMAGE_DIR_ID; }
その結果、修正されたフラグメントは次のようになります。 if( strcmp(ObjectID, "0") == 0 ) { args.flags |= FLAG_ROOT_CONTAINER; if( runtime_vars.root_container ) { if( (args.flags & FLAG_AUDIO_ONLY) && (strcmp(runtime_vars.root_containe$ ObjectID = MUSIC_DIR_ID; else ObjectID = runtime_vars.root_container; } else { if( args.flags & FLAG_AUDIO_ONLY ) ObjectID = MUSIC_ID; } } //Redirect video to folder if( strcmp(ObjectID, VIDEO_ID) == 0 ) { ObjectID = VIDEO_DIR_ID; } //Redirect music to folder if( strcmp(ObjectID, MUSIC_ID) == 0 ) { ObjectID = MUSIC_DIR_ID; } //Redirect images to folder if( strcmp(ObjectID, IMAGE_ID) == 0 ) { ObjectID = IMAGE_DIR_ID; } if( strcmp(BrowseFlag+6, "Metadata") == 0 ) { args.requested = 1; sql = sqlite3_mprintf("SELECT %s, " COLUMNS "from OBJECTS o left join DETAILS d on (d.ID = o.DETAIL_ID$ " where OBJECT_ID = '%q';", (args.flags & FLAG_ROOT_CONTAINER) ? "0, -1" : "o.OBJECT_I$ ObjectID); ret = sqlite3_exec(db, sql, callback, (void *) &args, &zErrMsg); totalMatches = args.returned; }
後続の更新の手順を簡素化するには、変更を含むパッチを保存します。
diff -u upnpsoap.c.old upnpsoap.c > ../minidlna-folders.patch
ファイルを編集する代わりに、パッチを適用するだけです:
cd ~/src/minidlna/minidlna- patch < ../minidlna-folders.patch
これで、構成に進むことができます。 ./configure
そしてコンパイル:
make
設置
1)将来バージョンを更新したい人のために、以前のバージョンを削除することができます(構成ファイルは保存されます)、これが行われない場合、インストールファイルの構成が新しいバージョンで変更される場合、古いファイルは/ usr / localに残ることがあります、最初のインストールで-直接ステップ2に進みます。
削除するには、以前のインストールのフォルダーに移動して、コマンドを実行します。
2)インストールを開始します(コメントでは、make installよりも正しい方法が提案されています)。sudo apt-get remove minidlna
-Dスイッチは、Debianパッケージを作成する必要があることを示します。sudo checkinstall -D
3)初期インストールを行う場合、initスクリプトを作成する必要があります。
、バージョンを更新する場合、他に何もする必要はありません。最初のインストール中に、空のファイルを開き、そこに次のコードを追加する必要があります。sudo nano /etc/init.d/minidlna
リスティング
、Ctrl + Oで保存してエディターを終了します-Ctrl + X
#!/bin/sh # # MiniDLNA initscript # # Based on the mediatomb debian package. # Original authors: Tor Krill <tor@excito.com> # Leonhard Wimmer <leo@mediatomb.cc> # Andres Mejia <mcitadel@gmail.com> # # Modified by: Benoit Knecht <benoit.knecht@fsfe.org> # ### BEGIN INIT INFO # Provides: minidlna # Required-Start: $network $local_fs $remote_fs # Required-Stop:: $network $local_fs $remote_fs # Should-Start: $all # Should-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start minidlna at boot time # Description: Manage the minidlna daemon, a DLNA/UPnP-AV media server. ### END INIT INFO unset USER # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="DLNA/UPnP-AV media server" NAME=minidlnad DAEMON=/usr/local/sbin/minidlnad PIDDIR=/run/$NAME PIDFILE=$PIDDIR/$NAME.pid SCRIPTNAME=/etc/init.d/minidlna DEFAULT=/etc/default/minidlna # Exit if the package is not installed [ -x $DAEMON ] || exit 0 # Read configuration variable file if it is present [ -r $DEFAULT ] && . $DEFAULT # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # Do not start the daemon if NO_START is enabled in DEFAULT if [ "$START_DAEMON" != "yes" ] && [ "$1" != "stop" ]; then log_warning_msg "$NAME: Not starting $DESC." log_warning_msg "$NAME: Disabled in $DEFAULT." exit 0 fi # Set the default configuration file if [ -z $CONFIGFILE ]; then CONFIGFILE=/etc/minidlna.conf fi # Set the default log file if [ -z $LOGFILE ]; then LOGFILE=/var/log/minidlna.log fi # Run as `minidlna' if USER is not specified or is `root' if [ -z $USER ]; then USER=minidlna fi # If no group is specified, use USER if [ -z $GROUP ]; then GROUP=$USER fi DAEMON_ARGS="-f $CONFIGFILE -P $PIDFILE $DAEMON_OPTS" # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started touch $LOGFILE && chown $USER:$GROUP $LOGFILE || return 2 if [ ! -d $PIDDIR ]; then mkdir $PIDDIR || return 2 fi chown $USER:$GROUP $PIDDIR || return 2 start-stop-daemon --start --quiet --pidfile $PIDFILE \ --chuid $USER:$GROUP --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE \ --chuid $USER:$GROUP --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -rf $PIDDIR return "$RETVAL" } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $? ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) if [ "$1" = "force-reload" ]; then # Rescan the collection DAEMON_ARGS="$DAEMON_ARGS -R" fi do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac :
4)その後、スクリプトを実行する権利を付与します。
5)そして、initスクリプトをアクティブにします。sudo chmod 755 /etc/init.d/minidlna
6)デフォルトでは、サービスはユーザーminidlnaで開始されるため、適切なアカウントを作成する必要があります。sudo update-rc.d minidlna defaults
sudo adduser --system --home /var/lib/minidlna --group --gecos "MiniDLNA server" minidlna
7)サーバー構成ファイルを編集します。 すべてのテレビがサーバーをポーリングするわけではないため、次のように、メディアフォルダーへのパスも指定する必要があります。「media_dir = V、/ mnt / sdb6 / Video /アレックス/「ファイルの適切なセクション内」:sudo nano /etc/minidlna.conf
minidlna.confのリスト
通常、この後、追加の設定は必要ありませんが、メディアへのアクセスに問題がある場合(または安全に再生したい場合)、アクセス権を構成できます。
# port=8200 # # # network_interface=eth0,eth1 #network_interface=eth0 # UID, # 1.1.0 # Debian init- #user=jmaggard # - # , media_dir # , : # A - : media_dir=A,/home/jmaggard/Music # V - : media_dir=V,/home/jmaggard/Videos # P - : media_dir=P,/home/jmaggard/Pictures # 1.1.0, : # PV - : media_dir=AV,/var/lib/minidlna/digital_camera # # , . # "service minidlna force-reload" root. # 1.1.0, , . media_dir=/var/lib/minidlna # DLNA-, # : "$HOSTNAME:$USER" #friendly_name= # db_dir=/var/lib/minidlna # - log_dir=/var/log # # log_level=1,2=1,3,4=2 ... # : "general", "artwork", "database", "inotify", "scanner", "metadata", "http", "ssdp", "tivo" # : "off", "fatal", "error", "warn", "info" or "debug" #log_level=general,artwork,database,inotify,scanner,metadata,info,ssdp,tivo=warn # - , : "/" album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg # # inotify=yes # TiVo #enable_tivo=no # DLNA- # JPEG- # . #strict_dlna=no # - # IP- #presentation_url=http://www.mylan/index.php # SSDP-, notify_interval=30 # DLNA-, serial=12345678 model_number=1 # MiniSSDPd, # DLNA/UPnP #minissdpdsocket=/run/minissdpd.sock # , # * "." - # * "B" - " " # * "M" - "" # * "V" - "" # * "P" - "" # "B" , "Music/Folders" #root_container=. # , , #force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title # # : #max_connections=50
8)次に、initスクリプト/ etc / default / minidlnaのパラメーターを確認します。 通常、調整は必要ありません。 ファイルが見つからない場合は、ソースからの初期インストール中にリストをコピーします。sudo nano /etc/default/minidlna
# , "yes" START_DAEMON="yes" # #CONFIGFILE="/etc/minidlna.conf" # - #LOGFILE="/var/log/minidlna.log" # # : minidlna #USER="minidlna" #GROUP="minidlna" # DAEMON_OPTS=""
許可の設定:
サービスは制限されたユーザーとして実行されるため、公開されたフォルダーとファイルはすべてのユーザーが読み取り可能である必要があります。したがって、ファイルに対する許可644: "rw- r-- r--"および755: "rwx rx rx"、フォルダー用。
次のコマンドを使用して、minidlna.confで指定された各フォルダーの可用性を確認します。
アクセス許可を変更する代わりに、ファイルを所有するユーザーまたはグループの代わりにMiniDLNAを実行できます。 これを行うには、/ etc / default / minidlnaのUSERおよびGROUPパラメーターを設定し、次のコマンドで/ var / lib / minidlnaフォルダーの所有者を変更します。
次のコマンドを使用して、minidlna.confで指定された各フォルダーの可用性を確認します。
フォルダーが使用できない場合は、アクセス許可を設定します。sudo -u minidlna ls -l
親フォルダーもすべてのユーザーが読み取り可能である必要があります。 パスで指定された各フォルダーの読み取りアクセス可能性を確認します。 親フォルダーでは、すべての子ファイルとフォルダーにリセット許可が必要でない場合、-Rスイッチなしでchmodを使用します。sudo chmod -R 755
アクセス許可を変更する代わりに、ファイルを所有するユーザーまたはグループの代わりにMiniDLNAを実行できます。 これを行うには、/ etc / default / minidlnaのUSERおよびGROUPパラメーターを設定し、次のコマンドで/ var / lib / minidlnaフォルダーの所有者を変更します。
sudo chown -R : /var/lib/minidlna
サーバー起動
以下を開始します。
sudo service minidlna force-reload
サービスが機能しているかどうかを確認し、起動オプションも確認します。
ps ax | grep minidlna
ポートがリッスンしているかどうかを確認します。
sudo ss -4lnp | grep minidlna
ログを確認します。
cat /var/log/minidlna.log
正常に起動した場合、ログはおよそ次のようになります。
Gothician gothician # cat /var/log/minidlna.log [2014/07/27 10:05:31] minidlna.c:1014: warn: Starting MiniDLNA version 1.1.3. [2014/07/27 10:05:31] minidlna.c:355: warn: Creating new database at /var/lib/minidlna/files.db [2014/07/27 10:05:31] minidlna.c:1053: warn: HTTP listening on port 8200 [2014/07/27 10:05:31] scanner.c:706: warn: Scanning /var/lib/minidlna [2014/07/27 10:05:31] scanner.c:793: warn: Scanning /var/lib/minidlna finished (0 files)! [2014/07/27 10:05:31] playlist.c:125: warn: Parsing playlists... [2014/07/27 10:05:31] playlist.c:259: warn: Finished parsing playlists. [2014/08/03 09:25:35] minidlna.c:1053: warn: HTTP listening on port 8200
「警告:Inotify max_user_watches [8192] is low。」と表示された場合、inotifyトラッキング記述子の数を100,000に増やす必要があります。これを行うには、/ etc / sysctl.confファイルに次の行を追加します。
#MiniDLNA warning fix fs.inotify.max_user_watches = 100000
エディターによる手動:
sudo nano /etc/sysctl.conf
またはコピーアンドペーストコマンド:
sudo sh -c 'printf "\n\n#MiniDLNA warning fix\nfs.inotify.max_user_watches = 100000\n" >> /etc/sysctl.conf && cat /etc/sysctl.conf'
パラメータの変更は、システムの再起動後に有効になります。
ブラウザでサーバーアドレスを開きます:8200、ライブラリ内のファイルの数を確認します。バージョン1.1.2以降、接続されているクライアントのリストも表示されます。
DLNA / UPnP-AVサーバーのセットアップが完了しました。
ディレクトリでエラーが発生した場合、ファイルを再スキャンする必要があります。
上記のinitスクリプトを使用する場合、メディアライブラリのスキャンを開始するには、次のコマンドを使用します。
sudo service minidlna force-reload
サービスが再開され、接続されたクライアントが切断されます。
各システムの起動時にメディアライブラリをスキャンするには、/ etc / default / minidlnaファイルのDAEMON_OPTSパラメーターに起動キー「-R」を指定できます。 大きなメディアライブラリをスキャンすると、ディスクが大幅にロードされるため、システムのロードが遅くなる可能性があります。
完全なカタログ作成には数分かかる場合があります。 フォルダーは、構成内の宣言の順にスキャンされます。 上記の設定で宣言された小さなフォルダのファイルは、スキャンプロセスの最初のディレクトリに表示されます。 構成内のコンテンツがほとんど再生されない大きなフォルダーを最後に配置することは理にかなっています。
これらはすべてシステムでテストされており、健康のために使用してください。 Linuxユーザーの数が常に増加することを願っています。
http://itadept.ru/、wiki.archlinux.orgの資料に基づいています。