EmulationStation unter Archlinux

Ich möchte hier kurz erklären, wie ich EmulationStation unter Archlinux installiert habe. Wer nicht weiss, was EmulationStation ist, findet hier ein kleines Teaser-Video auf YouTube.

Installation

Installiert werden müssen

  • EmulationStation
  • Emulatoren (hauptsächlich RetroArch bzw. die entsprechenden LibRetro-Plugins)
  • Spiele-ROMs
  • joyutils, zum Auslesen der angeschlossenen Gamepads

Dies geschieht unter Archlinux per:

pacaur -S emulationstation-git retroarch joyutils jstest-gtk-git

RetroArch benötigt nun für jedes zu emulierende System ein entsprechendes libretro-Plugin. Eine Übersicht der verfügbaren Plugins im AUR findet sich hier: https://aur.archlinux.org/packages/?O=0&K=libretro

Ich habe Emulatoren für den Atari7800, NES, SNES, GameboyColor und Gameboy Advanced installiert, zB per:

pacaur -S libretro-snes9x-next-git libretro-quicknes-git libretro-fceumm-git libretro-prosystem-git libretro-gambatte-git libretro-mgba-git

Für den N64 habe ich mupen64plus eigenständig installiert, da es besser läuft als das libretro-plugin.

pacaur -S mupen64plus

EmulationStation startet nun mit dem Befehl:

emulationstation

Noch funktioniert aber fast gar nichts…
Mit F4 kann es jederzeit beendet werden.
Führe zunächst die folgenden Schritte durch:

Konfiguration

Das Arbeitsverzeichnis von EmulationStation befindet sich im Homeordner:
~/.emulationstation

Theme installieren

Ich verwende das Theme „carbon“.
Dieses findet sich zB bei github: https://github.com/RetroPie/es-theme-carbon.
Lade dir das zip-Paket herunter und entpacke den Inhalt nach ~/.emulationstation/themes/carbon.
Editiere nun die Datei ~/.emulationstation/es_settings.cfg und trage das carbon-Theme entsprechend ein:

<string name="ThemeSet" value="carbon"></string>

ROM-Ordner anlegen

Alle meine Spiele-ROMs kommen in den Ornder ~/Dokumente/Medien/Spiele/ROM. Dort existiert für jedes System ein Unterordner (zB NES, SNES, N64), und in diesen liegen die entsprechenden ROMs für das entsprechende System.
Ihr dürft nur ROMs von solchen Spielen haben, die euch auch tatsächlich gehören!
ROMs findet ihr zB bei http://www.emuparadise.me/.

Systeme hinzufügen

Systeme (sprich die alten Spielekonsolen) werden in der Datei ~/.emulationstation/es_systems.cfg festgelegt.
Ein System entspricht hierbei einer Konsole (zB NES, SNES, N64).
Ihr müsst für jedes System angeben, in welchem Pfad die ROMs zu finden sind, wie die Dateiendungen der ROMS lauten, und wie der Emulatoraufruf erfolgen soll. Als Emulator wird hauptsächlich RetroArch verwendet.
Für den RetroArch-Aufruf muss immer über die Option -L der Pfad auf das entsprechende libretro-Plugin.so angegeben werden. Alle installierten Plugins finden sich im Ordner /usr/lib/libretro/

Hier mal als Beispiele meine Einträge für den GameBoy (Retroarch), SNES (Retroarch) und den N64 (mupen64plus):

	<system>
		<name>gb</name>
		<fullname>Nintendo Gameboy</fullname>
		<path>~/Dokumente/Medien/Spiele/ROM/GB</path>
		<extension>.gb</extension>
		<command>retroarch -L /usr/lib/libretro/gambatte_libretro.so %ROM%</command>
		<platform>gb</platform>
		<theme>gb</theme>
	</system>


	<system>
		<name>snes</name>
		<fullname>Super Nintendo Entertainment System</fullname>
		<path>~/Dokumente/Medien/Spiele/ROM/SNES</path>
		<extension>.sfc</extension>
		<command>retroarch -L /usr/lib/libretro/snes9x_next_libretro.so %ROM%</command>
		<platform>snes</platform>
		<theme>snes</theme>
	</system>

	
	<system>
		<name>n64</name>
		<fullname>Nintendo 64</fullname>
		<path>~/Dokumente/Medien/Spiele/ROM/N64</path>
		<extension>.n64 .z64</extension>
		<command>mupen64plus %ROM% </command>
		<platform>n64</platform>
		<theme>n64</theme>
	</system>

Lege für jedes System, welches du installiert hast, einen entsprechenden <system>-Eintrag an.

Gamepads auslesen

Ich habe hier einen Playstation-3-Controller, den ich per USB an den Laptop angeschlossen habe.
Jetzt muss ich herausfinden, welcher Knopf welchem Button entspricht.
Hierfür starte ich jstest-gtk. Mein PS3-Controller wird direkt erkannt, und über „Eigenschaften“ kann ich die Belegung auslesen.
Für meinen PS3-Controller gilt:

Playstation 3 Controller

analoges Steuerkreuz
--------------------
oben	Button 4
unten	Button 6
links	Button 7
rechts	Button 5


joystick links
--------------
oben	Axis1 -1
unten	Axis1 +1
links	Axis0 -0
rechts  Axis0 +0
klick	Button 1

joystick rechts
--------------
oben	Axis3 -3
unten	Axis3 +3
links	Axis2 -2
rechts  Axis2 +2
klick  	Button 2


BUTTONS
-------
PS	Button 16
Select  Button 0
Start	Button 3

L1	Button 10  // Axis14 1
L2	Button 8	//Axis12 1
R1	Button 11	//Axis15 1
R2	Button 9 	/Axis13 1

A(kreis)	Button 13	/Axis17
B(kreuz)	Button 14	/Axis18
C(dreieck)	BUtton 12	/Axis16
D(QUadrat)	Button 15	/Axis19

Diese Werte muss ich mir merken!!!

Gamepads hinzufügen

Jetzt wo ich weiss, welche Knöpfe und Sticks mein Gamepad hat, kann ich es in EmulationStation sowie in RetroArch bekanntmachen.

  • Emulationstation: um mit dem Gamepad durch das Emulationstation-Menü navigieren zu können.
  • RetroArch: um mit dem Gamepad zocken zu können
  • Mupen64plus: um mit dem Gamepad zocken zu können

Gamepad für Emulationstation

Editiere hierfür die Datei ~/.emulationstation/es_input.cfg.
Die Einträge für meinen PS3-Controller sehen dann so aus:

< ?xml version="1.0"?>
<inputlist>
	<inputconfig type="joystick" deviceName="Sony PLAYSTATION(R)3 Controller" deviceGUID="030000004c0500006802000011010000">
		<input name="a" type="button" id="14" value="1" />
		<input name="b" type="button" id="15" value="-1" />
		<input name="down" type="button" id="6" value="1" />
		<input name="left" type="button" id="7" value="-1" />
		<input name="menu" type="button" id="16" value="1" />
		<input name="pagedown" type="button" id="10" value="1" />
		<input name="pageup" type="button" id="11" value="-1" />
		<input name="right" type="button" id="5" value="1" />
		<input name="select" type="button" id="0" value="1" />
		<input name="start" type="button" id="3" value="1" />
		<input name="up" type="button" id="4" value="-1" />
	</inputconfig>
 
</inputlist>

Gamepad für RetroArch

Editiere hierfür die Datei ~/.config/retroarch/retroarch.cfg.
Hier muss der input für Player1 an die Knöpfe des Pads angepasst werden.
Eingetragen wird immer in den Erweiterungen _btn (Knopf) und _axis (Joysticks).

Die Einträge für meinen PS3-Controller sehen dann so aus:

input_player1_b = "z"
input_player1_b_btn = "14"
input_player1_b_axis = "nul"
input_player1_y = "a"
input_player1_y_btn = "12"
input_player1_y_axis = "nul"
input_player1_select = "rshift"
input_player1_select_btn = "0"
input_player1_select_axis = "nul"
input_player1_start = "enter"
input_player1_start_btn = "3"
input_player1_start_axis = "nul"
input_player1_up = "up"
input_player1_up_btn = "4"
input_player1_up_axis = "-1"
input_player1_down = "down"
input_player1_down_btn = "6"
input_player1_down_axis = "+1"
input_player1_left = "left"
input_player1_left_btn = "7"
input_player1_left_axis = "-0"
input_player1_right = "right"
input_player1_right_btn = "5"
input_player1_right_axis = "+0"
input_player1_a = "x"
input_player1_a_btn = "13"
input_player1_a_axis = "nul"
input_player1_x = "s"
input_player1_x_btn = "15"
input_player1_x_axis = "nul"
input_player1_l = "q"
input_player1_l_btn = "10"
input_player1_l_axis = "nul"
input_player1_r = "w"
input_player1_r_btn = "11"
input_player1_r_axis = "nul"
input_player1_l2 = "nul"
input_player1_l2_btn = "8"
input_player1_l2_axis = "nul"
input_player1_r2 = "nul"
input_player1_r2_btn = "9"
input_player1_r2_axis = "nul"

Außerdem lege ich hier „Hotkeys“ fest, mit denen ich die Emulation beenden, und zur EmulationStation zurückkehren kann:

input_enable_hotkey_btn = "16" # PS3-Knopf
input_exit_emulator_btn = "3"  # Start-Knopf

Wenn ich jetzt während der Emulation auf den PS3-Knopf gedrückt halte, und dann den Start-Knopf drücke, gelange ich zurück zu Emulationstation.

Die Einstellungen gelten für sämtliche libretro-Plugins.

Gamepad für mupen64plus

Editiere hierfür die Datei /usr/share/mupen64plus/InputAutoCfg.ini.
Hier sollte fast alles richtig sein.
Ich habe sie so verändert, dass an meinem PS3-Controller die „L2“-Taste zur „Z“-Taste wird, und die „R2“-Taste zum Hotbutton.
Hierfür habe ich den Bereich [PLAYSTATION(R)3 Controller] wie folgt angepasst:

[PLAYSTATION(R)3 Controller]
[Sony PLAYSTATION(R)3 Controller]
[Sony Computer Entertainment Wireless Controller]
[SHENGHIC 2009/0708ZXW-V1Inc. PLAYSTATION(R)3Conteroller]
plugged = True
plugin = 2
mouse = False
AnalogDeadzone = 4096,4096
AnalogPeak = 32768,32768
DPad R = button(5)
DPad L = button(7)
DPad D = button(6)
DPad U = button(4)
Start = button(3)
Z Trig = button(8)
B Button = button(15)
A Button = button(14)
C Button R = axis(2+)
C Button L = axis(2-)
C Button D = axis(3+)
C Button U = axis(3-)
R Trig = button(11)
L Trig = button(10)
Mempak switch =
Rumblepak switch =
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)

Der Hotbutton selbst wird in der Datei ~/.config/mupen64plus/mupen64plus.cfg aktiviert:

# Joystick event string for stopping the emulator
Joy Mapping Stop = "J0B9"

J0 bedeutet „Joystick 0“, B9 bedeutet „Button 9“ (ist beim PS3-Controller R2).
Drückt man nun während der Emulation „R2“, gelangt man zurück zur EmulationStation.

Fertig!

Fertig!
Jetzt kann ich emulationstation starten und meine alten ROMs zocken!

Weblinks

Posted in Arch, ubuntuusers | 1 Comment

WETEK openELEC Box

Bislang betreibe ich meinen Fernseher mit einer Dreambox (DVB-S Fernsehen) sowie mit einem PivosXIOS (Kodi). Beide Geräte habe ich gestern durch eine WETEK openeELEC Box ersetzt.

WETEK baut eigentlich Android-TV-Boxen, jedoch gibt es derzeit eine „limited Edition“ der WETEK-Play-Box, die mit vorinstalliertem openeELEC direkt als Kodi-Box verkauft wird. Die Box kostet 99,- Euro inklusive weltweitem Versand.

Die Box hat 2 DVB-S-Tuner für HD-TV eingebaut (gibt es aber auch mit 2xDVB-C), verfügt über 3 USB-Ports, 100mbit-LAN, WLAN, microSD, SPDIF und HDMI.

Die Box war 2 Tage nach der Bestellung hier, das Paket beinhaltet die Box, eine Fernbedienung sowie ein HDMI-Kabel und ein AV-Kabel.

Eine Anleitung liegt nicht bei.

Die Box (bzw. Kodi) läuft super zackig, und wenn man schonmal irgendwo anders Kodi benutzt oder eingerichtet hat, kommt man direkt klar. Die einzige Schwierigkeit ist, das Live-TV der Tuner in Kodi zu integrieren. Ich verwende für diese Aufgabe tvheadend, welches man direkt in Kodi nachinstallieren kann. Die Installation und Konfiguration von tvheadend ist aber alles andere als intuitiv, so dass man ohne Anleitungsvideos bei Youtube (z.b. hier oder hier) nicht klarkommen wird.
Ist tvheadend aber einmal eingerichtet, fluppt es wirklich gut, und die TV-Streams lassen sich im gesamten Netzwerk abgreifen. So kann ich an jedem Laptop hier auch fernsehen.

Fazit

  • Die Box (bzw. Kodi) läuft super flott, HD per DVB-S läuft klar und ruckelfrei
  • Die Fernbedienung liegt gut in der Hand und hat viele nützliche Funktionstasten
  • Ich bin begeistert

Weblinks

Posted in Jean Pütz, ubuntuusers | Tagged , | 12 Comments

[kile] Sweave-Werkzeug erstellen

Ich nutze den Kile-Editor für meine LaTeX Dokumente.
Innerhalb von LaTeX möchte ich gerne meinen R-Code bzw. dessen Ausgabe integrieren. Ich schreibe daher meine Latex- und R-Code in so genannte .Rnw-Dateien, welche ich (sofern alle R-Daten parat sind) in .tex übersetze und per pdflatex als PDF-Datei ausdrucke.
Für diesen Vorgang kann man in Kile einfach ein neues „Werkzeug“ erstellen. Naja,… eigentlich sind es 3 Werkezuge:

  1. ein Werkzeug, welches den Rnw-Code in tex übersetzt
  2. ein Werkzeug, welches die tex-Datei als PDF schreibt
  3. ein Built-Werkzeug, welches die ersten zwei Werkzeuge aufruft

Später brauch man dann „nur“ das Built-Werkzeug auf eine .Rnw-Datei anwenden.

Werkzeug „sweave“

  • Klicke auf „Einstellungen“ -> „Kile einrichten“ -> „Werkzeuge“ -> „Erstellen“ -> „Neu..“
  • gib ihm den Namen „Sweave“ und ändere „benutzerdefiniert“ in „PDFLatex“ um.
  • Schreibe in das Feld „Befehl“:
    R
  • Schreibe in das Feld „Optionen“:
    CMD Sweave '%source'
  • Die drei Häkchen müssen gesetzt sein.
    Auswahl_003
  • wechsle auf den Reiter „Erweitert“
  • „Typ“ = „Außerhalb von Kile ausführen“
  • „Klasse“ = „LaTeX“
  • Schreibe in das Feld „Erweiterung der Quelldatei“:
    Rnw
  • Schreibe in das Feld „Erweiterung der Zieldatei“:
    tex
  • lasse die anderen Felder leer
  • Auswahl_002
  • speichere das neue Werkzeug mit „Ok“

Werkzeug „PDFlatexFromSweave“

  • Klicke auf „Einstellungen“ -> „Kile einrichten“ -> „Werkzeuge“ -> „Erstellen“ -> „Neu..“
  • gib ihm den Namen „PDFlatexFromSweave“ und ändere „benutzerdefiniert“ in „PDFLatex“ um.
  • Schreibe in das Feld „Befehl“:
    pdflatex
  • Schreibe in das Feld „Optionen“:
    -interaction=nonstopmode -synctex=1 '%S.tex'
  • Die drei Häkchen müssen gesetzt sein.
  • wechsle auf den Reiter „Erweitert“
  • „Typ“ = „Außerhalb von Kile ausführen“
  • „Klasse“ = „LaTeX“
  • Schreibe in das Feld „Erweiterung der Quelldatei“:
    tex
  • Schreibe in das Feld „Erweiterung der Zieldatei“:
    pdf
  • lasse die anderen Felder leer
  • speichere das neue Werkzeug mit „Ok“

Built-Werkzeug

  • Klicke auf „Einstellungen“ -> „Kile einrichten“ -> „Werkzeuge“ -> „Erstellen“ -> „Neu..“
  • gib ihm den Namen „QuickSweave“ und ändere „benutzerdefiniert“ in „Quickbuilt“ um.
  • Auswahl_004
  • Wähle nun aus dem „Werkzeug“-Dropmenü die neuen Werkzeuge „sweave“ und „PDFlatexFromSweave“ aus, und klicke jeweils auf „Hinzufügen“.
  • Auswahl_006
  • Klicke auf „OK“ um das Built-Werkzeug zu speichern.

Jetzt kann man das neue Built-Werkzeug „QuickSweave“ anwenden, um .Rnw-Dateien in PDF umzuwandeln.

Weblinks

Quelle: http://danielfischer.name/index.php?id=382

Posted in Arch, LaTeX, Ubuntu, ubuntuusers | Leave a comment

MediaWiki: alle Seiten einer Kategorie plus Unterkategorien als PDF exportieren

Ich habe ein kleines php-Script geschrieben, mit welchem man alle Seiten einer Kategorie inklusive der Seiten aller Sub-Kategorien von einer beliebigen MediaWiki-Instanz als PDF exportieren kann.
Benötigt werden PHP>5.5, wkhtmltopdf und pdftk (müssen evtl. erst installiert werden).

https://github.com/produnis/myscripts/blob/master/PHP/mwc2pdf.php

Ihr müsst am Anfang des Scripts die drei Variablen euren Bedürfnissen entsprechend anpassen, und dann das Script aufrufen per:

$ php /Pfad/zu/mwc2pdf.php

Das Script nutzt nun die „api.php“ der MediaWiki-Instanz und erstellt damit einen „Pagetree“. Von diesem Pagetree wird jede einzelne Seite mittels wkhtmltopdf in eine PDF-Datei exportiert.
Anschließend werden alle erzeugten PDF-Dateien mittels pdftk zu einer einzelnen Datei namens „MWC2PDF.pdf“ zusammengeführt.

$ nano mwc2pdf.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
< ?php
## Welcome to mwc2pdf
## ----------------------------------------------
## Media Wiki Category To PDF (MWC2PDF)
## is a php script that exports a Category from MediaWiki
## into PDF, including all Pages of that category as well as
## all pages from subcategories.
## mwc2pdf uses MediaWiki's "api.php" to collect
## all data and create a "pagetree".
## mwc2pdf prints out every item of that pagetree
## into a single pdf-file using "wkhtmltopdf".
## It than combines all single pdf-files into
## one single pdf-file called "MWC2PDF.pdf" using "pdftk".
##
## -----------------------------------------------
## Requires:
## - PHP >= 5.4
## - wkhtmltopdf
## - pdftk
## -------------------------
## Written by Joe Slam 2015
## Licence: GPL
## -------------------------
##
## Usage:
## 1) Change the three lines to fit your situation
## 2) open terminal
## 3) $ php /PATH/TO/mwc2pdf.php #
##
## All files are generated in the directory you call mwc2pdf from
##
####################################################################
# + + + + + + + + + + + + + + + + + + + + + + +
## Change this vars to fit your system
$mywiki = "http://192.168.0.2/produniswiki/"; // URL to index.php
$kategorie = "Kategorie:Hauptkategorie"; // Which Category to grab?
$kategorie_word = "Kategorie:"; // What is "Category:" in your wiki's language?
# + + + + + + + + + + + + + + + + + + + + + + +
# ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
## Dont change after here...
# ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
##----------------------------------------------
## API -Commands
#------------------
# List all Subcategories
$cmd_subcat = "api.php?action=query&format=xml&list=categorymembers&cmlimit=5000&cmtitle=";
# List all Pages of Category
$cmd_catinfo = "api.php?action=query&format=xml&prop=categoryinfo&titles=";
# Get URL from pageid
$cmd_geturlfromID = "api.php?action=query&format=xml&inprop=url&prop=info&pageids=";
# Functions
#-------------------
#-----------------------------------------------------------------------
function getCategoryID($xml){
# this function returns the pageid of a category
$arr=$xml->query[0]->pages[0]->page->attributes();
#echo $arr["pageid"] . ": ";
#echo $arr["title"] . "\n";
return($arr["pageid"]);
}
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
function startsWith($haystack, $needle)
{ # this function checks if the string
# "$hayshack" starts with the letters "$neddle"
$length = strlen($needle);
return (substr($haystack, 0, $length) === $needle);
}
#-----------------------------------------------------------------------
function wikiHTMLprint($command){
# This function takes a pageid and
# returns the "printable"-URL of that
# page/category
$xml = simplexml_load_file($command);
$arr = $xml->query[0]->pages[0]->page->attributes();
$output= str_replace("&action=edit", "&printable=yes", $arr['editurl']);
return($output);
}
#---- end of functions --------------
#### M A I N S C R I P T
#-------------------------
echo "\n\nCollecting data for " . $kategorie ."\n\n";
# Get pageid of start-category
$xml = simplexml_load_file($mywiki . $cmd_catinfo . $kategorie);
$current_parent = getCategoryID($xml);
# Setting up all important vars() and arrays()
#---------------------------------------------
$x = 0;
$y = 0;
$done = FALSE;
$the_pageids = NULL;
$the_names = NULL;
$loop_list = NULL;
$next_level = 0;
$current_level = 0;
$the_pageids[0] = $current_parent;
$the_names[0] = $kategorie;
$the_prefix[0] = "p0_";
$the_parentid[0] = 0;
$the_level[0] = 0;
$is_category[0] = "C";
$loop_list[0] = $kategorie;
$loop_id[0] = $current_parent;
$loop_prefix[0] = "p0_";
//---------------------------------
$x++;
# MAIN LOOP
#----------------------
while ($done == FALSE){
// get pageid of current category
$current_parent = $loop_id[$y];
# getting members of this category
//-------------------------------------------------------------
$xml = simplexml_load_file($mywiki . $cmd_subcat . $loop_list[$y]);
foreach($xml->query[0]->categorymembers[0]->cm as $child){
$arr = $child->attributes();
#echo $arr["pageid"] . ": ";
#echo $arr["title"] . "\n";
// is this a Page?
//---------------------------------------------------
if(startsWith($arr["title"], $kategorie_word) == FALSE){
if(
(startsWith($arr["title"], "Datei:") == FALSE) AND
(startsWith($arr["title"], "File:") == FALSE) AND
(startsWith($arr["title"], "Media:") == FALSE) AND
(startsWith($arr["title"], "Bild:") == FALSE)
){
// is page already in list?
if(in_array("" . $arr["title"] . "", $the_names)){
#echo "page " . $arr["title"] . " already in list \n";
}else{
#echo "new Page";
$the_pageids[$x] = $arr["pageid"];
$the_names[$x] = $arr["title"];
$the_parentid[$x] = $current_parent;
$the_level[$x] = $current_level;
$the_prefix[$x] = $loop_prefix[$y] . sprintf('%05d',$x);
$is_category[$x] = "P";
}
}else{ $x--; }
//----------------------------------------------------
// is this a Category?
//----------------------------------------------------
}elseif(startsWith($arr["title"], $kategorie_word) == TRUE){
// is Category already in list?
if(in_array("" . $arr["title"] . "", $the_names)){
#echo "cat " . $arr["title"] . " already in list \n";
}else{
#echo "new Category";
$loop_list[] = $arr["title"];
$loop_id[] = $arr["pageid"];
$loop_prefix[] = $loop_prefix[$y] . sprintf('%05d',$x) . "_";
$the_pageids[$x] = $arr["pageid"];
$the_names[$x] = $arr["title"];
$the_prefix[$x] = $loop_prefix[$y] . sprintf('%05d',$x) . "_";
$the_parentid[$x] = $current_parent;
$the_level[$x] = $current_level+1;
$is_category[$x] = "C";
}
}
//----------------------------------------------------
$x++;
} // END foreach
$y++;
$current_level++;
if($y == sizeof($loop_list)+2){
$done=TRUE;
}
//--------------------------------------------------------------
} // End WHILE false
// END Main Loop
#############################################################################
# # # # S O R T D A T A # # # # # # #
#--------------------------------------------
array_multisort($the_prefix, $the_pageids, $the_names, $the_parentid, $the_level,$is_category);
#--------------------------------------------
# # # # # # # # # # # # # # # # # # # # #
#--- output final array ---
echo "\nThis is what I got:\n";
$i = count($the_prefix);
echo $i;
for ($x =0;$x < $i; $x++){
echo $the_prefix[$x] . "|" . $is_category[$x] . "| ". $the_pageids[$x] . ": " . $the_names[$x] . " | Lev=" . $the_level[$x] . " (P=" . $the_parentid[$x] . ")\n";
}
#--------------------------------------------
## print PDF of Cats and Pages
## depends: wkhtmltopdf
#---------------------------------------------
echo "\nPrinting single Pages to PDF (wkhtmltopdf)\n";
$i = count($the_prefix);
echo "\n";
for ($x =0;$x < $i; $x++){
$command = $mywiki . "" . $cmd_geturlfromID . "" . $the_pageids[$x];
$this_pdf = wikiHTMLprint($command);
echo "Printing pageid " . $the_pageids[$x] . " | (" . $x . "/" . $i . ")\n";
$command = "wkhtmltopdf '" . $this_pdf . "' " . sprintf('%06d',$x) . "-" . $the_prefix[$x] . "-" . $is_category[$x] . "_" . $the_pageids[$x] . ".mwc2pdf.pdf";
$out = shell_exec($command);
echo "\n";
}
#---------------------------------------------
## cats the PDFs into a single one
## depends: pdftk
#---------------------------------------------
# $dummy = shell_exec("wkhtmltopdf http://google.com google.pdf");
echo "\nGenerating single PDF-file (pdftk)\n";
$command = "pdftk *.mwc2pdf.pdf cat output MWC2PDF.pdf";
$out = shell_exec($command);
## -------------------------------------------------------
echo "\nDone.\n";
?>
Posted in Jean Pütz, Professor Hastig, ubuntuusers | Leave a comment

cairo-dock hat unter xfce4.12 einen Schatten

Seit dem Update auf xfce4 wirft das Cairo-Dock einen komischen Strich auf meinen Desktop.
cairoschatteen

Das Ganze ist eine Einstellungssache von xfce4.

Gehe in den Einstellungen zu xfce4-settings | Window Manager Tweaks | compositor und entferne den Haken bei „Schatten unter Leisten anzeigen
Feineinstellungen der Fensterverwaltung_001

Posted in Arch, ubuntuusers | 1 Comment

[Arch]: top auf alte Default-Einstellung zurücksetzen

Seit dem letzten Arch-Update sieht die top-Ausgabe nicht mehr wie gewohnt aus.
scaled_full_099441bc0fee28ef73e1
Um den Status quo wieder herzustellen geht man wie folgt vor:

  • lösche (falls vorhanden) die Datei ~/.toprc
  • starte „top
  • drücke z (kleines z!)
  • drücke V (großes V!)
  • drücke 1 (die Zahl Eins)
  • drücke y
  • drücke m m
  • drücke t t t
  • drücke W (großes W! …dies schreibt eine neue Config-Datei ~/.toprc).

Danke an procps-ng-sucks

Weblinks

Posted in Arch, Ubuntu, ubuntuusers | Leave a comment

[Ubuntu] Boot-Repair

Habe mir heute nach einem Festplattenwechsel den Bootloader zerschossen.

Musste aber nur per Livestick booten und dann „boot-repair“ installieren:

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair
boot-repair

bootrepair
Das Programm erkennt automatisch was wo installiert ist, und repariert die Bootloader entsprechend.
Ich fans das ungemein hilfreich…

via

Posted in dev/null, Ubuntu, ubuntuusers | Tagged , , | 2 Comments

[mythtv]: mythtv-database No database selected

Beim Aktualisieren von mythtv unter Ubuntu (12.04) bekomme ich wiederholt folgenden fehler:

> ERROR 1046 (3D000) at line 22: No database selected
> dpkg: error processing mythtv-database (--configure):

Ich musste lange suchen, bis ich folgenden Hinweis gefunden habe. Scheinbar handelt es sich um einen Package-Fehler im Ubuntu-PPA. Das „Einfachste“ ist, die Datei /var/lib/dpkg/info/mythtv-database.postinst mit einem Editor zu öffnen, und folgende Abschnitte an die eigenen Einstellungen (Datenbank, User, Passwort) anzupassen [im Editor suche ich nach ‚case "$1" in‚, das ist bei mir ab Zeile 74]:

case "$1" in
configure)
. /usr/share/debconf/confmodule
 
db_get mythtv/mysql_mythtv_dbname
database="HERE"
 
db_get mythtv/mysql_mythtv_user
mythtv_username="HERE"
 
db_get mythtv/mysql_mythtv_password
mythtv_password="HERE"
 
db_get mythtv/mysql_admin_user
admin_username="HERE"
 
if [ "$admin_username" = "debian-sys-maint" ]; then
SECURITY_INFO="--defaults-file=/etc/mysql/debian.cnf"
else
db_get mythtv/mysql_host
hostname="HERE"
 
db_get mythtv/mysql_admin_password
admin_password="HERE"
 
if [ "$admin_password" != "" ]; then
admin_password="-p$admin_password"
fi
SECURITY_INFO="--host=$hostname --user=$admin_username $admin_password"
fi

Jetzt läuft das sudo apt-get upgrade problemlos durch.

Jedoch wird durch den vorherigen Fehler mein MythWeb-Plugin zerschossen, also besser gesagt, ich sehe nur eine leere weiße Seite und erhalte im error-log

Call to a member function query_col() on a non-object in /usr/share/mythtv/mythweb/includes/utils.php

In diesem Fall müssen in der Apache-Configdatei für mythweb (bei mir unter /etc/apache2/sites-available/mythweb.conf) die Einträge „setenv“ neu eingetragen werden (ich hab mir eine .bak-Datei erzeugt, die ich einfach wieder zurückkopieren kann) :

            setenv db_server        "localhost"
            setenv db_name          "mythconverg"
            setenv db_login         "mythtv"
            setenv db_password      "mythtv"

Script

Ich habe mir ein kleines Script geschrieben, welches diese Arbeit abnimmt.

touch fixmythweb.sh
chmod +x fixmythweb.sh
nano fixmythweb.sh
#!/bin/bash
#sudo sed -i 's/FIND/REPLACE/g' DATEI
#-------------------------------------
sudo sed -i 's/database=\"\$RET\"/database=\"mythconverg\"/g' /var/lib/dpkg/info/mythtv-database.postinst
sudo sed -i 's/mythtv_username=\"\$RET\"/mythtv_username=\"mythtv\"/g' /var/lib/dpkg/info/mythtv-database.postinst
sudo sed -i 's/mythtv_password=\"\$RET\"/mythtv_password=\"SECRET\"/g' /var/lib/dpkg/info/mythtv-database.postinst
sudo sed -i 's/admin_username=\"\$RET\"/admin_username=\"root\"/g' /var/lib/dpkg/info/mythtv-database.postinst
sudo sed -i 's/hostname=\"\$RET\"/hostname=\"localhost\"/g' /var/lib/dpkg/info/mythtv-database.postinst
sudo sed -i 's/admin_password=\"\$RET\"/admin_password=\"SUPER_SECRET\"/g' /var/lib/dpkg/info/mythtv-database.postinst
#
sudo cp /etc/apache2/sites-available/mythweb.conf.bak /etc/apache2/sites-available/mythweb.conf
#
sudo apache2ctl graceful
#
sudo apt-get update && sudo apt-get upgrade

Links

Posted in Professor Hastig, Ubuntu, ubuntuusers | Tagged | Leave a comment

mp3-Dateien reparieren mit mp3val

Es kommt häufiger vor, dass ich einzelne mp3-Dateien per cat zu einer einzigen mp3-Datei zusammenführe. Beispielsweise, um meine Hörspiel-CDs als „One-Tracks“ auf die Platte zu bannen.
Hierbei kann das Problem auftauchen, dass bestimmte Player (z.B. mpd) das erzeugte File nicht richtig abspielen. Beispielsweise zeigt mpd an, dass der Track nur 5 Minuten lang sei, obwohl der Track 67 Minuten läuft. Dummerweise beendet mpd dann nach eben diesen 5 Minuten die Wiedergabe.
Der Grund liegt in einem durch cat unbrauchbar gesetzten „Xing header“.

Abhilfe kann hier das Tool mp3val schaffen.

sudo apt-get install mp3val

Ein mp3-File lässt sich untersuchen per:

mp3val FILE.mp3

Reparieren lässt sich das File per:

mp3val FILE.mp3 -f

hierbei wird auch eine .bak-Datei des Originals angelegt

Eine Reparatur ohne .bak-Datei erfolgt per:

mp3val FILE.mp3 -f -nb
Posted in Professor Hastig, Ubuntu, ubuntuusers | Tagged | 2 Comments

Die eigene IP herausbekommen

lokal

Um die eigene IP im lokalen Netz herauszubekommen, hilft der Befehl:

ifconfig

Internet

Um die eigene IP im Internet herauszubekommen hilft folgender wget-Befehl:

wget -qO- http://ipecho.net/plain ; echo
Posted in Ubuntu, ubuntuusers | Tagged | 6 Comments
« Older